2012-11-08 24 views
23

ご存知のように、我々は(mb_strtolowerを使用する必要があります)の代わりに(strtolowerあれば)我々はUTF8データで作業している間:mb_strtolowerとUTF8文字列

$str = 'برنامه'; 
echo strtolower($str); 
---------------------- 
output: ����� 

これは、すべての未定義文字になくなって、今私は、今

$str = 'برنامه'; 
echo mb_strtolower($str, mb_detect_encoding($str)); 
---------------------- 
output: برنامه 

それは固定なのでmb_strtolowerにあるを使用する方法:今mb_strtolower()まだ

$str = 'برنامه'; 
echo mb_strtolower($str); 
---------------------- 
output: ����� 

同じ結果を、使用mb_detect_encodingも持っています。

今私の問題は、私はarray_mapをして同じことをしたいということです。

$results_array = array_map('mb_strtolower', $results_array); 

私は上記の行でmb_detect_encodingを使用するようになっていますか?

答えて

45

ソリューションは、あなたの文字列のエンコーディングが何であるかmb_strtolowerを伝えることです:

echo mb_strtolower($str, 'UTF-8'); 

あなたは、このパラメータを毎回提供したくない場合は、すべてのmb_の機能のために、一度にそれを設定します。

mb_internal_encoding('UTF-8'); 

mb_関数を呼び出して、文字列をUTF-8として処理します。

echo mb_strtolower($str); // works without second parameter now 

mb_detect_encodingは、それが検出されたために返されますが、任意のコード化文字列を確実に確実に検出することは概念的に不可能であるため、一般的には信頼できません。 あなたの文字列がエンコードされていることを知り、この情報を明示的に渡します。

+0

非常に役に立ちました、ありがとう – behz4d

6

簡単に言えば、mb_strtolowermb_detect_encodingと呼ぶ独自の関数を定義します。

$results_array = array_map(function($var) { 
     return mb_strtolower($var, mb_detect_encoding($var)); 
}, $results_array); 
+0

これがトリックでした!ありがとう – behz4d

+2

ソリューションを過度に複雑にする方法。 :-P – deceze

関連する問題