こんにちは
iPhone欲しさに今更ながら表参道にならべば良かったと
後悔している山科です。
日ごろPHPで開発をしているのですが
この前引っかかって無駄に時間を費やしてしまったことについて
書きます。
内容としては
mb_detect_encodingという文字列のエンコードを調べる
PHPの関数についてです。
百聞は一見にしかずということで以下にサンプルと実行結果を
記載しました。
-------------------------------------------------------------
コード :
$str1 = "任天堂";
$str2 = "日本語";
echo $str1 . "のエンコードは" . mb_detect_encoding($str1) . "です\n";
echo $str2 . "のエンコードは" . mb_detect_encoding($str2) . "です\n";
?>
結果 :
任天堂のエンコードはUTF-8です
日本語のエンコードはEUC-JPです
------------------------------------------------------------------
環境はEUC-JPで実行したのですが
上記のように文字によって判定が違います。
これはPHPのmbstringのdetect_orderがautoになっていること
によって起こります。
autoに設定するとPHPが以下の順番で文字コード判定を行い
合致した時点でその文字コードを判定しているためです。
[ASCII, JIS, UTF-8, EUC-JP, SJIS]
解消するためには
・mbstringのdetect_orderの順番をEUC-JPを前に設定する
・mb_detect_orderの第二引数にdetect_orderの順番を指定する
今回は環境をいじれなかったため後者の方法で解決しました。
-------------------------------------------------------------
コード :
$str1 = "任天堂";
$str2 = "日本語";
echo $str1 . "のエンコードは" . mb_detect_encoding($str1, array("EUC-JP", "UTF-8")) . "です\n";
echo $str2 . "のエンコードは" . mb_detect_encoding($str2, array("EUC-JP", "UTF-8")) . "です\n";
?>
結果 :
任天堂のエンコードはEUC-JPです
日本語のエンコードはEUC-JPです
------------------------------------------------------------------
日本語の文字コードはいつもながら苦労しますが
こんなオチもPHPを扱っていく上では理解していかなきゃいけないのか、、、
と一つ勉強になった出来事でした。
iPhone欲しさに今更ながら表参道にならべば良かったと
後悔している山科です。
日ごろPHPで開発をしているのですが
この前引っかかって無駄に時間を費やしてしまったことについて
書きます。
内容としては
mb_detect_encodingという文字列のエンコードを調べる
PHPの関数についてです。
百聞は一見にしかずということで以下にサンプルと実行結果を
記載しました。
-------------------------------------------------------------
コード :
$str1 = "任天堂";
$str2 = "日本語";
echo $str1 . "のエンコードは" . mb_detect_encoding($str1) . "です\n";
echo $str2 . "のエンコードは" . mb_detect_encoding($str2) . "です\n";
?>
結果 :
任天堂のエンコードはUTF-8です
日本語のエンコードはEUC-JPです
------------------------------------------------------------------
環境はEUC-JPで実行したのですが
上記のように文字によって判定が違います。
これはPHPのmbstringのdetect_orderがautoになっていること
によって起こります。
autoに設定するとPHPが以下の順番で文字コード判定を行い
合致した時点でその文字コードを判定しているためです。
[ASCII, JIS, UTF-8, EUC-JP, SJIS]
解消するためには
・mbstringのdetect_orderの順番をEUC-JPを前に設定する
・mb_detect_orderの第二引数にdetect_orderの順番を指定する
今回は環境をいじれなかったため後者の方法で解決しました。
-------------------------------------------------------------
コード :
$str1 = "任天堂";
$str2 = "日本語";
echo $str1 . "のエンコードは" . mb_detect_encoding($str1, array("EUC-JP", "UTF-8")) . "です\n";
echo $str2 . "のエンコードは" . mb_detect_encoding($str2, array("EUC-JP", "UTF-8")) . "です\n";
?>
結果 :
任天堂のエンコードはEUC-JPです
日本語のエンコードはEUC-JPです
------------------------------------------------------------------
日本語の文字コードはいつもながら苦労しますが
こんなオチもPHPを扱っていく上では理解していかなきゃいけないのか、、、
と一つ勉強になった出来事でした。
[ この記事を通報する ]
- URL:http://yaplog.jp/gmodev/archive/21


