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を使用してるから,というかUbuntuUTF-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という単語はないと思う.