为什么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";
}
?>
答案 0 :(得分:0)
因为在计算机中有一百种不同的方法来编码文本。此外:
您的角色(提)在Unicode目录中列为'hold in hand; lift in hand' (U+63D0),并且具有以下编码:
0xE6 0x8F 0x90
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)) );