请看一下:
$str = '¡hola!'; // '¡' is the spanish opening exclamation mark
echo $str{0}; // prints nothing
echo $str{1}; // prints �
echo $str{2}; // prints h
php脚本具有UTF-8编码,我得到的结果与apache模块或CLI相同。 PHP版本:5.4.6
为什么我会得到这个奇怪的结果?
答案 0 :(得分:4)
按[]
或{}
索引字符串不是多字节安全的。
使用多字节功能,例如mb_substr
答案 1 :(得分:2)
这是因为¡实际上是UTF中的多字节字符,PHP无法通过数组访问([0]
)正确处理。您将要查看多字节函数:http://php.net/manual/en/book.mbstring.php
这应该按照您的预期运作:
$str = '¡hola!';
echo mb_substr($str, 0, 1, 'UTF-8'); // prints ¡
echo mb_substr($str, 1, 1, 'UTF-8'); // prints h
echo mb_substr($str, 2, 1, 'UTF-8'); // prints o