PHPのmb_ereg系関数で文字化けする時に確認すること


こんばんはっ。
最近楽器熱がファイヤーッしてるので、2日に一回くらいのペースですがギターを練習してます。
夜の0時過ぎに洗面所のドア閉めて静かに・・・
防音室が欲しいーっ!



はてさて、日本に住んで日本でPHP使って仕事しているので、もちろん文字はマルチバイト。
文字コードのトラブルは「キーッ」ってなりますね。
シングルバイトの文字しか扱わない英語圏とかだと、問題少ないんですかね。。。

そんなマルチバイトを扱う際、mb_internal_encoding指定してますよね?
で、mb_regex_encoding指定してますか??
ちなみに私は、滅多にmb_regex_encodingを指定していません。
で、文字化けして初めて気づきます。

これに関しては、


mb_eregで日本語検索すると・・ : アシアルブログ


が参考になるかと
mb_internal_encodingだけではmb_ereg系の関数で使う文字コードの指定はできないみたいですね。

実際、私の借りてるこのサーバで



mb_internal_encoding("UTF-8");
print mb_regex_encoding();


としてみると、ばっちり「EUC-JP」と返ってきました、なんてこったい。

ついでに、


mb_internal_encoding("UTF-8");
print bin2hex(mb_ereg_replace("りょう", "量", "りょう");


こんなことをやってみると、「e9878f0038」って返ってきます。

「量」は「e9878f」なので、「0038」という余計な文字が入ってしまっています。

ですが、

print mb_regex_encoding("UTF-8");

を指定しておくと、問題なく変換されます。





マルチバイトの変換などで文字化けの際は、mb_regex_encodingのことを思い出してあげてください。

コメントを残す