Проблема с php utf-8: UTF-8 везде, но mb_strpos всегда === false.Зачем? - PullRequest
3 голосов
/ 11 августа 2011

Я работаю с кириллическими болгарскими строками.

Я хочу сравнить $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 голосов
/ 11 августа 2011

У меня не было проблем;пожалуйста, сравните с вашим кодом:

$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
0 голосов
/ 14 августа 2011

Вот решение. Я бы никогда не подумал, что это поможет, но это помогло ... Я не понимаю, на самом деле, почему ...

$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, пожалуйста, оставьте здесь свое мнение.

Спасибо всем. Вы все равно мне помогли.

0 голосов
/ 11 августа 2011

у меня работает:

$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) ,

может что-то с вашим вводом?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...