mb_convert_encodingに潜む問題

http://qiita.com/shoyan/items/d9f7c014ba8003e19b57

mb_convert_encoding ( string $str , string $to_encoding [, mixed $from_encoding ] )
文字エンコーディングを変換する関数です。
第3引数の $from_encoding には変換前の文字エンコーディング名を指定しますが、
ここを“auto”と指定しておくと、環境によっては

Warning: mb_convert_encoding(): Unable to detect character encoding

のようなエラーが発生し、文字エンコーディングの変換が失敗する場合があります。
ですので、”auto” は極力使わず、文字エンコーディングを指定することをおすすめします。

なぜこのようなエラーが発生するかというと、
autoはphp.iniの言語設定によって挙動が変わってしまうからです。

mb_convert_encodingとうまく付き合うには

①autoは使わない
autoは指定せずに適切なエンコーディングを指定しましょう。
言語設定が Japanese の場合は “ASCII,JIS,UTF-8,EUC-JP,SJIS” です。
autoを指定したい場合は代わりに、”ASCII,JIS,UTF-8,EUC-JP,SJIS”と設定しましょう。
mb_convert_encoding ( string $str , string $to_encoding , “ASCII,JIS,UTF-8,EUC-JP,SJIS”)

②php.iniを変更する
もしくは、php.iniに mbstring.language = Japanese を指定しておけばautoと指定した場合は”ASCII,JIS,UTF-8,EUC-JP,SJIS”として認識されます。
しかし、この方法はphp.iniとの依存関係が強くなるためあまりおすすめできません。

③mb_language関数を使用する
php.iniを変更するのが難しい場合は、mb_convert_encodingの前に
mb_language(“Japanese”); と指定する方法もあります。
—————————————————————————————-

★!! 注意 !!★  mb_convert_encoding関数には配列を引数として渡すことはできない

例)$match_titleが配列(Array)の場合、文字列に変換しようとして以下、コードを書くと

$match_title = mb_convert_encoding($match_title,”UTF-8″,”SJIS”);

↓↓↓↓↓↓↓下の様なエラーが出る↓↓↓↓↓↓↓

Notice: Array to string conversion in C:\php\nobuneko\test.php on line 23

「Array(配列)を文字変換(?)しようとしている」????

なので、配列の要素を限定して、

About

You may also like...

Your email will not be published. Name and Email fields are required