mb_convert_encodingで文字化けするWin系の機種依存文字の解決

$sbj = '①オレンジアーム<br>②メロンアーム<br>③マンゴーアーム<br>';

こういうShift-jisの文字列がありまして。後処理のためにutf-8にする必要があり、特に何も考えずにmb_convert_encoding。

$sbj = mb_convert_encoding($sbj, 'UTF8', 'Shift-jis');

ところがこれだと出力が文字化けしてしまう。

$sbj = '①オレンジアーム<br>②メロンアーム<br>③マンゴーアーム<br>';
$sbj = mb_convert_encoding($sbj, 'UTF8', 'Shift-jis');
var_dump($sbj);

出力結果

string()"?オレンジアーム<br>?メロンアーム<br>?マンゴーアーム<br>"

全部”?”になってしまっている。

Shift-jisではなくSJIS-winを使う

①、②などの機種依存文字(見えない環境の方ごめんなさい、マル数字で(1)、(2)、と書いてあります)
を使う場合、通常のShift-jisではなくて、Windows用のSJIS-winという文字コードになる。

$sbj = '①オレンジアーム<br>②メロンアーム<br>③マンゴーアーム<br>';
$sbj = mb_convert_encoding($sbj, 'UTF8', 'SJIS-win');
var_dump($sbj);

出力結果

string()"①オレンジアーム<br>②メロンアーム<br>③マンゴーアーム<br>"

これでOK。ソイヤ!ソイヤ!

広告

About: dacelo


Leave a Reply

Your email address will not be published. Required fields are marked *