/ / PHPでutf-8文字セットを使用する - mb関数が必要ですか? - php、utf-8、マルチバイト関数

PHPでutf-8 charsetを使う - mb関数が必要ですか? - php、utf-8、マルチバイト関数

この数日、私は「私が取り組んできた」私のPHPコードベースをlatin1からutf-8に変換します。 2つの主な解決策は、シングルバイト関数を組み込みマルチバイト関数に置き換えるか、php.iniファイルでmbstring.func_overload値を設定することです。

しかし、その後私は遭遇した この スタックオーバーフローのスレッドthomasrutterは、スクリプトと文字列リテラルがutf-8でエンコードされている限り、マルチバイト関数がutf-8に実際には必要ないことを示しているようです。

これ以外に他の証拠は見つかりませんでした。それが本当かどうか、そしてそれが判明した場合、私は自分のコードをmb_functionsに変換する必要がないのであれば、それはリアルタイムの節約になるでしょう。

回答:

回答№1の場合は10

私が問題を理解している限り、すべてのあなたのデータはutf-8では100%です - そしてそれはユーザー入力、データベースそしてあなたがそれらに特殊文字があるならPHPファイル自体のエンコーディングも意味します - これは 真実 検索および比較操作にはtrue。 @ntdが指摘するように、非マルチバイトのstrlen()は、マルチバイト文字を含む文字列に対して実行されると間違った結果をもたらします。

この エンコーディングの基本についての素晴らしい記事です。


回答№2については4

それらを使用していない限り、これらは必要ありません。 それらが置き換える機能 (そしてそれはあなたの これらのうち少なくとも1つを使用するか、そうでなければ明示的に次のような拡張機能を必要とします。 HTTP処理.

UTF-8準拠に向けて取り組んでいるとき、私はいつも PHP utf-8チートシート 1つ追加すると、PCREパターンを更新する必要があります。 u 修飾語。


回答№3の場合は3

マルチバイト文字列を調べたり変更したりするとすぐに、mb_ *関数を使う必要があります。

$str = "abcžđščćöçefg";
mb_internal_encoding("utf-8");

echo "strlen: ".strlen($str)."n";
echo "mb_strlen: ".mb_strlen($str)."n";

これは印刷されます:

strlen: 20
mb_strlen: 13

答え№4の2

thomasrutterは、 サーチ 特別な取り扱いは必要ありません。例えば、あなたがUTF8文字列の長さをチェックする必要があるならば、私はあなたがそれをプレーンテキストで行うことができる方法を見ません。 strlen().


回答№5の2

mb_strtoupperなどの関数も必要かもしれません。 strtoupperは "tをáからÁに変換しませんでした。


答え№6の場合は1

期待する機能がいくつかあります文字列がシングルバイトになるようにします(そして、それはiso-8859-1であるとさえ仮定している)。このような場合は、自分が何をしているのかを知っている必要があり、おそらく置換関数を使用する必要があります。かなり包括的なリストがあります。 http://www.phpwact.org/php/i18n/utf-8


回答№7は0

PHPでマルチバイト関数を拡張するmbfunctionsライブラリを使うことができます。

http://code.google.com/p/mbfunctions/


回答№8の場合は0

あなたはこれを使うことができます http://php.net/manual/en/mbstring.overload.php php.iniファイルで設定するので、コードを変更する必要はありません。

ただし、すべての文字列関数が自動的に変更されるわけではないため、注意してください。 これは一つです: http://php.net/manual/en/function.substr-replace.php