【问题标题】:Russian characters from hex to string utf8 - getting the wrong characters从十六进制到字符串 utf8 的俄语字符 - 获取错误的字符
【发布时间】:2019-12-18 09:02:19
【问题描述】:

我正在尝试将十六进制编码的参数传递给图像创建脚本。所有文件都是utf8。一切都很好,直到我循环遍历字符串。请参阅最小化的示例:

$string="ABCDЯ";

for($i=0;$i<strlen($string);$i++) {
 echo $string[$i]."<br>"
}

给出输出:

A
B
C
D
�

而不是

A
B
C
D
Я

这是为什么呢?由于我想分析字符串中的字符,所以在这一点上失败了,因为所有俄语字符都以...结尾。

【问题讨论】:

    标签: php hex ascii cyrillic


    【解决方案1】:

    manual:

    PHP中的字符串实现为字节数组和整数 表示缓冲区的长度。它没有关于如何 这些字节转换为字符,将该任务留给 程序员。

    所以,您正在逐字节地迭代 $string。如果字符不是单字节编码的,则不会返回正确的结果。

    鉴于 PHP 没有规定字符串的特定编码,一个 可能想知道字符串文字是如何编码的。例如,是 字符串 "á" 等价于 "\xE1" (ISO-8859-1)、"\xC3\xA1" (UTF-8, C 形式)、“\x61\xCC\x81”(UTF-8、D 形式)或任何其他可能的 表示?答案是字符串将以任何形式编码 时尚它被编码在脚本文件中。

    您可以在迭代$string时使用mb_substr获取字符。

    <?php
    $string = 'ABCDЯ';
    
    for($i = 0; $i < strlen($string); $i++) {
        echo mb_substr($string, $i, 1, 'UTF-8') . '<br>';
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-04
      • 2014-03-07
      • 2017-03-04
      • 2016-02-26
      • 1970-01-01
      • 2018-02-02
      • 1970-01-01
      相关资源
      最近更新 更多