为什么ord PHP的结果与charCodeAt javascript的结果不一样?

时间:2016-12-28 05:39:50

标签: javascript php jquery

为什么ord PHP的结果与charCodeAt javascript的结果不一样?

PHP的结果是230 143 144

javascript的结果是25552

如何应用php代码获取与javascript结果相同的结果?

的javascript

<script>
var someString = "提";

for(var i=0;i<someString.length;i++) {
    var char = someString.charCodeAt(i);
    alert(char);
}
</script>

PHP

<?php
$s = '提';

for ( $i = 0; $i < strlen( $s ); $i++ ) {
    print ord( $s[ $i ] ) . "\n";
}
?>

1 个答案:

答案 0 :(得分:0)

因为在计算机中有一百种不同的方法来编码文本。此外:

  • PHP并不真正知道您的数据编码正在使用
  • 在最近的版本中,JavaScript并没有真正正确地实现Unicode(尽管这在这种特殊情况下并不相关)

您的角色(提)在Unicode目录中列为'hold in hand; lift in hand' (U+63D0),并且具有以下编码:

  • AS UTF-8:0xE6 0x8F 0x90
  • AS UTF-16:0x63D0(十进制25552

您的PHP文件似乎保存为UTF-8(您可以在文本编辑器中查看),因此提取以三个字节编码,但您的代码将单个字符拆分为单个字节。

但是,您的JavaScript函数会将UTF-16编码打印为documented

PHP提供了几个内置函数来在编码之间进行转换:

$as_utf8 = '提';
var_dump( unpack('n', mb_convert_encoding($as_utf8, 'UTF-16BE', 'UTF-8')) );
var_dump( unpack('n', iconv('UTF-8', 'UTF-16BE', $as_utf8)) );