$ str [n]可以用于汉字字符串吗?

时间:2019-04-04 21:50:46

标签: php string utf-8

<?php   
    $str ='如果';
    var_dump($str[1]);
    echo '<br />';
    var_dump(ord($str[1]));
    echo '<br />';
    echo mb_substr($str , 1 , 1)
?>

这将输出如下内容:

  

string(1)“�”

     

int(166)

     

我想获取第二个字符mb_substr可以正确获取,而$ str [n]不起作用。完全可以使用$str[n]处理utf-8字符吗?

1 个答案:

答案 0 :(得分:4)

UTF-8使用多个字节来表示ASCII范围(U + 00000至U + 0007F)之外的Unicode字符。您的字符串如果(U + 05982 U + 0679C)表示为六个字节:

0xE5 0xA6 0x82 0xE6 0x9E 0x9C
-------------- --------------
  (U+05982)      (U+0679C)

PHP本身不支持Unicode。它将所有字符串视为字节序列,而不是Unicode字符。因此,$str[1]从此序列中提取第二个 byte (0xA6 = 166),而不是第二个 character 。这是一个连续字节,因此单独存在时无效,并显示为替换字符``。

请勿在UTF-8字符串上使用字符索引。为了获得正确的行为,必须使用mb_函数。