mb_regex_encoding()でJISが指定できない
少し前に「マルチバイト対応の文字列折り返し処理」というエントリを書いたけど、その中でpreg_split()だとうまくいくのにmb_split()だとうまくいかない処理というのがあった。
で、今日たまたま似たような処理を書いていたんだけど、何故かmb_split()でもうまくいったのでなんでだろうと思ったら、要するに文字コードの設定が適切ではなかったということだった。
mb_split()は第一引数が正規表現パターンになっていて、内部では鬼車で正規表現処理を行っているのでmb_internal_encoding()ではなくてmb_regex_encoding()で文字エンコーディングを設定してやらないといけなかったらしい。
というわけで早速mb_regex_encoding()でエンコーディングも設定するようなコードに書き直して万々歳……と思ったらそうもいかなかった。JIS(ISO-2022-JP)を指定したら'Unknown encoding'とかいって怒られた。
mb_internal_encoding('JIS'); // OK! mb_regex_encoding('JIS'); // NG
mb_internal_encoding()では使えるのに、mb_regex_encoding()では使えないとは??