请看看这个:
$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
为什么我会得到这个奇怪的结果?
[]
按or索引字符串{}
不是多字节安全的。
改用多字节函数,例如mb_substr
这是因为¡实际上是 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