“奇怪的”人物

时间:2011-04-20 17:20:19

标签: php

这是我的代码:

$result = "";
$str = "Тугайный соловей";
for ($y=0; $y < strlen($str); $y++){
    $tmp = substr($str, $y, 1);
    $result = $result.$tmp;
}
echo "result = ".$result;

$ result给出:ТугайнÑ<йÑоловÐμй

我正在寻找两个星期来解决这个问题阅读所有类型的文章,但仍然.......

非常感谢!

4 个答案:

答案 0 :(得分:4)

您需要使用multi-byte functions而不是普通的字符串函数。

$result = "";
$str = "Тугайный соловей";
for ($y=0; $y < mb_strlen($str); $y++){
    $tmp = mb_substr($str, $y, 1);
    $result = $result.$tmp;
}
echo "result = ".$result;

答案 1 :(得分:1)

我已经尝试过你的代码,我在UTF-8编码中看到了正确的字符串。如果页面字符集或浏览器设置为ISO-8859-1,我得到错误的字符串。所以使用正确的编纂就足够了。

答案 2 :(得分:1)

只是详细说明Juanmi的回答:字符集类型(因为我已经截取了屏幕截图)......

内容类型:text / html;字符集= UTF-8

UTF-8

内容类型:text / html;字符集= ISO-8859-1

ISO-8859--1

当指定了正确的编码时,您的代码似乎有效,但它将每个字节视为自己的字符,这不是处理UTF-8的正确方法。您可能需要multibyte-aware string functions

答案 3 :(得分:0)

您使用的函数不是UTF-8字符串上的UTF-8字符串

改用mb_substr

编辑:xeoncross上面的答案是一样的,使用他的代码:)