4

请看看这个:

$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

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

4

2 回答 2

4

[]按or索引字符串{}不是多字节安全的。

改用多字节函数,例如mb_substr

于 2013-01-08T16:50:52.507 回答
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
于 2013-01-08T16:54:56.653 回答