LoglessLove

愛は常に上書き保存 新ブログ→ http://www.loglesslove.net/blog

全体表示

[ リスト ]

エンバケッソ

カタカナの「ソ」が化けてトラブルが発生するのをたまに聞く。
「ソ」のコードを見てみると、SJIS で 0x83 0x5c。
ところで、「\」の文字コードは 0x5c。
たとえば SJIS の文書で「\」をデリミタにして単語を分ける、なんてことをしてみる。

ミライ\ニ\バケル\シンソザイ

これを PHP の explode() で切り分けて配列にする。

$aru = "ミライ\ニ\バケル\シンソザイ";
$paka = explode("\\", $aru);
print_r($paka);

そうすると、

Array ( [0] => ミライ [1] => ニ [2] => バケル [3] => シン・ [4] => ザイ )

のような感じになって、意図した分け方をしてくれない。
「ソ」の後ろ 2 バイトを「\」と解釈してしまうので、このような現象が起きる。
5C問題とか呼ばれているらしい。

たぶんこうすればいい。

$paka = explode("\\", mb_convert_encoding($aru, "UTF-8", "SJIS"));
$src = array_fill(0, count($paka), "SJIS");
$tmp = array_fill(0, count($paka), "UTF-8");
$paka = array_map("mb_convert_encoding", $paka, $src, $tmp);
print_r($paka);

一旦 SJIS から他の文字コードに変換して、分割して、元の文字コードに戻す。

Array ( [0] => ミライ [1] => ニ [2] => バケル [3] => シンソザイ ) 

円マークに化けずに新素材が無事未来に化けてくれたよ\(^o^)/

この記事に

閉じる コメント(0)

コメント投稿

顔アイコン

顔アイコン・表示画像の選択

名前パスワードブログ
絵文字
×
  • オリジナル
  • SoftBank1
  • SoftBank2
  • SoftBank3
  • SoftBank4
  • docomo1
  • docomo2
  • au1
  • au2
  • au3
  • au4
投稿

.


みんなの更新記事