35

ご存じのように、utf-8 データを操作している間はmb_strtolower()代わりに使用する必要があります。strtolower()

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

それはすべて未定義の文字になりました、今私は使用しますmb_strtolower()

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

それでも同じ結果になりました。

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

これで直りましたので、使い方mb_strtolowerは も持つことmb_detect_encodingです。

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

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

上記の行でどのように使用することになっていmb_detect_encodingますか?

4

2 に答える 2

69

mb_strtolower解決策は、文字列エンコーディングが何であるかを伝えることです。

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

このパラメーターを毎回指定したくない場合は、すべてのmb_機能に対して1回設定します。

mb_internal_encoding('UTF-8');

次に、任意のmb_関数を呼び出すことができ、文字列をUTF-8として処理します。

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

mb_detect_encodingたまたまそれを検出したために戻っ'UTF-8'てきますが、任意にエンコードされた文字列を確実に検出することは概念的に不可能であるため、一般的に信頼性はありません。文字列が何にエンコードされているかを把握し、この情報を明示的に渡します。

于 2012-11-08T12:09:39.487 に答える
9

簡単に言えば、で呼び出す独自の関数を定義しmb_strtolowerますmb_detect_encoding

$results_array = array_map(function($var) {
      return mb_strtolower($var, mb_detect_encoding($var));
}, $results_array);
于 2012-11-08T12:09:04.273 に答える