PHPで文字エンコード・続
そういえばやってること書いてなかった.
メールでJISの文章が送られてくるのだけど,そこから正規表現を使って抜き出したい.とそれだけ.
なんとかできたらしい.
<?php var_dump( mb_detect_order("ASCII,JIS,UTF-8,EUC-JP,SJIS")); $en = "UTF-8"; echo '$encode = '."$en\n"; mb_regex_encoding($en); //マルチバイトの正規表現関数に$enを使用 $encode_matchee = mb_detect_encoding( $body[0] ); //$body[0]はJISコードの文字列が入ってる $matchee = mb_convert_encoding( $body[0], $en, $encode_matchee ); //$enにコンバート $encode_matcher = mb_detect_encoding( '6月12日' ); // 何故かSJISが返ってくる $matcher = mb_convert_encoding( '6月12日', $en, $encode_matcher ); //$enにコンバート var_dump( mb_ereg( $matcher, $matchee, $captured ) ); var_dump( mb_convert_encoding($captured[0],"UTF-8",$en) ); //UTF-8じゃないと表示できない ?>
$enをUTF-8,SJIS,EUC-JPに変えても問題なくマッチされた.
mb_regex_encoding($en);を忘れてただけか.
環境はUbuntu8.04のUTF-8ロケールなので文字列表示はそれにコンバートしてる.という解釈でいいのかな.
エディタでの保存形式も問題あるらしいが,VimではUTF-8を使用してるから,というかUbuntuがUTF-8ロケールだから問題ないはず.
<?php mb_regex_encoding("JIS"); ?>
とすると怒られる.JISではできないぽい.まあいいか.
あとphp.iniいじった./etc/php5/cli/php.ini
mbstring.internal_encoding,mbstring.http_outputを中心に適当に入れてみる.
そしたらmb_detect_order("ASCII,JIS,UTF-8,EUC-JP,SJIS")がなくても大丈夫.
しかし結局必要十分条件がわかってなかったり.
<?php mb_detect_encoding( '6月12日' ); ?>
でSJISが帰ってくるのはなんでだろう.VMware on Vistaだから?
関係ないけどmatchee,matcherという単語はないと思う.