字符'¡'的奇怪字符串行为

时间:2013-01-08 16:45:56

标签: php string character

请看一下:

$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

为什么我会得到这个奇怪的结果?

2 个答案:

答案 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