php で文字コード変換をする場合は
つまり、Shift-JISの拡張文字をUTF-8 (から|へ) 変換しようとすると化けるらしい。
拡張文字の代表としては「磲」とかも。
あとは「?????」のローマ数字の類もそう。
解決としては
って感じですが、これで問題なく変換できます。
これだけでなぜ通るのか、ちょっと調べたけれどよくわかりませんでした。
詳しい方いたら教えてください...
参考
PHPでのハシゴ高とかタチ崎の扱い
【2007/06/18追記】
mb_convert_encodingの書き方が間違っていました。
恥ずかしい...
【2007/09/17追記】
なぜ "SJIS-win"で文字化けが解消されるのかと言えば、拡張文字の持ち方の違いによるものでした。
以下の記事を読んでいただくと、参考になるかと思います。
PHP+PostgreSQLでEUC-JP出力は非常識!? 〜windowsでIBM拡張文字が文字化け : 地方で活動するweb制作者の日々を綴るblog
mb_convert_encoding("ほげほげ", "SJIS", "UTF-8")といった感じで変えられますが
mb_convert_encoding("郄橋", "SJIS", "UTF-8")とやると文字化けします。
つまり、Shift-JISの拡張文字をUTF-8 (から|へ) 変換しようとすると化けるらしい。
拡張文字の代表としては「磲」とかも。
あとは「?????」のローマ数字の類もそう。
解決としては
mb_convert_encoding("郄橋", "SJIS-win", "UTF-8")これだけ?
って感じですが、これで問題なく変換できます。
これだけでなぜ通るのか、ちょっと調べたけれどよくわかりませんでした。
詳しい方いたら教えてください...
PHPでのハシゴ高とかタチ崎の扱い
【2007/06/18追記】
mb_convert_encodingの書き方が間違っていました。
恥ずかしい...
【2007/09/17追記】
なぜ "SJIS-win"で文字化けが解消されるのかと言えば、拡張文字の持ち方の違いによるものでした。
以下の記事を読んでいただくと、参考になるかと思います。
PHP+PostgreSQLでEUC-JP出力は非常識!? 〜windowsでIBM拡張文字が文字化け : 地方で活動するweb制作者の日々を綴るblog
この記事のおかげで一発で解決しました。
fgetで一行取得してから
mb_convert_encoding($hoge,'UTF-8','SJIS-win');
ってな感じです。
ありがとうございました。