php の mb_convert_encoding において、文字コード指定でSJISを指定すると一部文字で誤変換することあったバグ php

php の mb_convert_encoding において、文字コード指定でSJISを指定すると一部文字で誤変換することあったバグ

Shift_JISと、マイクロソフトが使う(CP932)は異なり、CP932のコードマップを使用するには、代わりに SJIS-WINを使うこと。

例えば、windowsでsjisで作成したファイルの文字列を、UTF8 に変換するには

1.【NG】$data = mb_convert_encoding($str UTF-8 SJIS ); →一部文字で、において誤変換が発生する場合あり
2.【OK】$data = mb_convert_encoding($str UTF-8 sjis-win ); →こっちつかってね


という話。

1.のように読み込む文字の文字コードを SJIS を指定した場合例えば
「-」マイナスの文字がある場合だと
「-」16進表記文字コード(U+FF0D)が、同じマイナスですが別の文字コード
「-」16進表記文字コード(U+002d)に誤変換されたりする。

このような文字がいくつかある、
なので、phpで SJISの文字コード変換するときの文字コード指定する際には
sjis-winを指定しないと、アプリで予期せぬバグが発生することがあるという話。

余談だけど、選択した文字を16進表記文字コードで表示するには、さくらエディタが便利でした