PHP函数chr和带有特殊字符的ord

时间:2015-09-24 20:45:11

标签: php character encode chr ord

在PHP中,当我使用ord函数来捕获我的角色的ASCII代码时,我得到了这样的行为:

ord("a") // return 97
chr(97) // return a

但是当我使用像Œ这样的特殊字符时,回报是不同的:

ord("Œ") // return 197
chr(197) // return �

我的所有网页都以utf8编码。对于大多数特殊字符,此行为是相同的。

过去有人见过这个问题吗?我该如何解决?

2 个答案:

答案 0 :(得分:1)

ord()chr()都使用字符的ASCII值,这是单字节编码。 Œ不是ASCII中的有效字符。

您可以通过指定字节偏移量来获取多字节字符的每个字节,如下所示:

$oethel = "Œ";
$firstByte = ord($oethel[0]); // 197
$secondByte = ord($oethel[1]); // 146

但是,反转该过程不起作用,因为分配字符串字节偏移会将该字符串转换为数组:

$newOethel = "";
$newOethel[0] = chr(197);
$newOethel[1] = chr(146);
echo $newOethel;
// Output is as follows: 
// PHP Notice:  Array to string conversion
// Array

答案 1 :(得分:0)

带有问号的黑色钻石是显示问题。

https://stackoverflow.com/a/38363567/1766831中查看黑钻的详细信息。有两种情况;看哪一个适合。