[PHP]環境依存文字のUTF-8への変換
結論
Windows環境で使われる文字コードは通常のShift-JIS(SJIS)ではなくWindows独自バージョンであり、PHPではSJIS-winと表記する。
Shift_JISではない
ITリテラシーの低い会社などでは、Windows内のフォルダ名やファイル名に特殊文字を使っていることが多々見受けられます。
㈱, ①, ②, ③, Ⅰ, Ⅱ, Ⅲ, etc...
こういった文字をコマンド経由などで取り込んで文字コードをUTF-8にしたいときに、通常以下のようにすると思いますが、この例では特殊文字が文字化けしてしまい、しばらくはまりました。
mb_convert_encoding($str, 'utf8', 'SJIS');
Windowsでは文字コードSJISを使用していると思われがちですが、よく調べてみると、SJIS-win(cp932)というものらしいです。
ですので、以下のようにすると特殊文字の文字コード変換が可能です。
mb_convert_encoding($str, 'utf8', 'SJIS-win');
また、$from_encodingに'auto'を指定するとPHPはSJISと解釈するようなので、文字コード変換に失敗します。
実は...
簡単に言うとShift-JISは一般的な文字のみで、それにいくつか便利に使える拡張文字を追加したものがWindowsで使われているSJIS-win(cp932)という文字コードです。
しかし、便利と思われた拡張文字は他の文字コードではほとんど採用されず、結果特定の環境でしか使えない環境依存文字となってしまいました。
このような過去がありますが、UTF-8にはこうした特殊文字も用意されているため、変換できるというわけです。
Author And Source
この問題について([PHP]環境依存文字のUTF-8への変換), 我々は、より多くの情報をここで見つけました https://qiita.com/ryo4004/items/70a22c3ca5b2bfc4df1c著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .