PHPの文字コードではSJISじゃなくてSJIS-win、EUC-JPじゃなくてeucJP-winを

  • 公開日:2013/8/24
この記事は最終更新日から10年以上が経過しています。


PHPで使える文字コード変換はmb_list_encodings()を使って確認することができます。

foreach(mb_list_encodings() as $jcode)
     echo $jcode . '<br>¥n';

注目するのは「SJIS-win」と「eucJP-win」です。
どっちも「win」が付いているのでおわかりでしょうが、Windows拡張の文字に対応できるようになっています。

つまり、SJISよりもSJIS-winの方が文字が多いということです。
SJIS-winにあってSJISにない文字は、

  • NEC 特殊文字(13区)
  • NEC 選定 IBM 拡張文字(89~92区)
  • IBM 拡張文字(115~119区)

よく使うところでは、以下のような文字がSJIS-winにあってSJISにはないのです。

  • 丸数字 (①②③…⑳)
  • ローマ数字 (ⅠⅡⅢ…Ⅹ、ⅰⅱⅲ…ⅹ)
  • カッコ付きの株 (㈱)
  • はしご高[はしごたか] (髙)
  • たつ崎[たつさき、たちさき] (﨑)

具体的には下記参考サイトをご覧下さい。

では、「eucJP-win」はどうかというと、「SJIS-win」と同様に扱えるようになるわけではありません。
NEC 特殊文字(13区)くらいにしか対応していないので、はしご高[はしごたか] (髙)などは扱えません。そこでPHP5.2.1から新たに追加されたので「CP51932」です。これを使うと「SJIS-win」と同様に文字を扱えるようになります。

というわけで、文字コード変換の指定で「Shift_JIS」を使う時は「SJIS」じゃなくて「SJIS-win」を。
「EUC-JP」を使う時は「EUC-JP」じゃなくて「eucJP-win」を。