【问题标题】:Strange string behaviour with character '¡'带有字符“¡”的奇怪字符串行为
【发布时间】:2023-03-20 17:15:01
【问题描述】:

请看一下这个:

$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

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

【问题讨论】:

  • 看起来¡是一个多字节字符..为什么要通过[]访问它?
  • 多字节字符串。 ¡ 是一个双字节字符 [00A1],这就是为什么第一个字节没有得到任何东西,而第二个字节是垃圾。
  • @Peter 不是浏览器编码问题,用 [] 或 {} 索引字符串不是多字节安全的。

标签: php string character


【解决方案1】:

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

改用多字节函数,例如mb_substr

【讨论】:

    【解决方案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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-08-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-08
      • 1970-01-01
      相关资源
      最近更新 更多