2011-08-10 28 views
3

我正在使用西裏爾字母保加利亞字符串。php utf-8問題:UTF-8無處不在,但mb_strpos始終=== false。爲什麼?

我想比較$words[$i](加入:$詞語是一個字符串數組,$字[$ 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

+0

發佈您的示例$ words [$ i] –

+0

echo「
」。$ i。「
」; echo $ words [$ i]; – Haradzieniec

+0

這是$ i和$ words [$ i]的值,如您所問: echo「
」。$ i。「
」; echo $ words [$ i]; & l t ; b & g t ;добр& l t ;/B & g t ; //(刪除空格),信д是從0 其餘所有起始號碼9是相同的:一旦你替換 「д」 對一個變量$ siglesymb實際上應該是「д」,mb_strpos在字符串中找不到它。 – Haradzieniec

回答

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 db中的某些字段,實際上cp125,但我沒有從那裏接收任何數據,雖然它已連接)。

如果有人知道cp125出現的原因,請在此發佈您的意見。

謝謝大家。無論如何,你幫了我。

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

或許真的與你的輸入?

+0

我將這段代碼完全複製到我的php文件中,放在最上面,然後把exit();中斷下面的代碼。結果是: ool(false), bool(false), ool(false), bool(false), 這讓我瘋狂。無法理解問題。 (Offtopic:夥計們,對不起,我仍然不是這個網站的專家,對我來說一切都是新的......我試着回答你所問的所有問題......)... – Haradzieniec

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