php utf-8问题:UTF-8无处不在,但mb_strpos总是=== false。为什么?

时间:2011-08-10 22:47:02

标签: php utf-8

我正在使用西里尔语的保加利亚语字符串。

我想比较$words[$i](添加: $ words是一个字符串数组,$ words [$ i]是一个字符串)如果它包含来自$cyrillic_symbols的符号

$cyrillic_symbols="абвгдежз"; //OK!

$siglesymb=mb_substr($words[$i],9,1,'UTF-8'); //OK! "д" letter received.

echo $siglesymb; //and д displayed in the browser, OK!

echo mb_strpos($cyrillic_symbols,$siglesymb,0,'UTF-8');

没有显示任何内容,因为我认为它是== false。我不明白原因。

echo mb_strpos($cyrillic_symbols,"д",0,'UTF-8');

与上面相同,但结果不是false,而是4,因为“абвгдежз”中的第五个位置。

总结果为:д4。为什么呢?

为什么结果不是д44

任何想法如何制作д44

3 个答案:

答案 0 :(得分:0)

适合我:

$cyrillic_symbols="абвгдежз";
$words = preg_split('/[ ,.;]+/', 'да работи да');

foreach($words as $word) {
    for($i = 0; $i < mb_strlen($word,'UTF-8'); $i++) {

        $siglesymb = mb_substr($word,$i,1,'UTF-8');
        echo $siglesymb.' ';
        var_dump( mb_strpos($cyrillic_symbols,$siglesymb,0,'UTF-8') );
        echo ", ";
    }
    echo "<br>";
}

输出:

д int(4) , а int(0) ,
р bool(false) , а int(0) , б int(1) , о bool(false) , т bool(false) , и bool(false) ,
д int(4) , а int(0) ,

也许你输入了什么?

答案 1 :(得分:0)

我没有遇到任何问题;请与您的代码进行比较:

$cyrillic_symbols="абвгдежз"; //OK!

$words = array("абвгдабвгд");  // my test
$i = 0;

$siglesymb=mb_substr($words[$i],9,1,'UTF-8'); //OK! "д" letter received.

echo $siglesymb; //and д displayed in the browser, OK!

echo mb_strpos($cyrillic_symbols,$siglesymb,0,'UTF-8');  //4 

echo mb_strpos($cyrillic_symbols,"д",0,'UTF-8');         //4

答案 2 :(得分:0)

这是一个解决方案。我永远不会猜到它会有所帮助,但它有所帮助......我实际上并不明白为什么......

$cyrillic_symbols="абвгд";
$cyrillic_for_display=iconv('cp1251','utf-8',$symbols_non_utf);//that's a solution!
echo $cyrillic_symbols; //rectangles are displayed
echo $cyrillic_for_display; //абвгд

P.S。在php文件之上是:

header ("Content-Type: text/html; charset=UTF-8");//yes, UTF-8.

据我所知,上述所有帖子都没有人有这样的问题。

此外,UTF-8在文件中无处不在(MySQL数据库中的某些字段除外,其中实际上是cp125,但我没有从那里获取任何数据,尽管它已连接)。

如果有人知道cp125出现的原因,请在此发表您的意见。

谢谢大家。无论如何你帮了我。