- ベストアンサー
【PHP】mb_convert_encoding()で "~" 等が化ける
PHP5.2.4 使用者です。(レンタルサーバー) 例えば、サーバー及び記述の文字コードがEUC-JPだとして、 $str = "~"; $str = mb_convert_encoding($str , 'UTF-8', 'EUC-JP'); とすると "?" に化けてしまいます。 調べたところ、マルチバイト文字の ~ ¬ ∥ - ¢ £ \ は対応するコードがないから化けるとか… "~" はよく使う文字ですし、そんな簡単に化けられては困るんですが… プロの方はこういうのどう処理してるのでしょう。 お詳しい方、よろしくお願いいたします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
euc-jp じゃなくてeucjp-win にしてみてください。 [php] mb_convert_encoding と UTF-8 の誤変換問題 ( しゃいん☆のブログ| 名古屋市 Webシステム開発 サーバ構築 ネットワーク構築 株式会社コネクティボ ) http://shain.blog.conextivo.com/2007/07/php_mb_convert_encoding_utf8.html 根っこが深い問題なんです。実は。 404 Blog Not Found:Encode - 規格のバグまでは直せません http://blog.livedoor.jp/dankogai/archives/50488765.html
その他の回答 (2)
- grumpy_the_dwarf
- ベストアンサー率48% (1628/3337)
処理系にWindowsが混入してるとそういう現象が起こるらしいです ね。Windowsが波ダッシュと全角チルダを混同してることと、euc-jp には全角チルダなんて無いことが諸悪の根源とか。 どこかで全角チルダを波ダッシュに変換してやる必要があるわけで すが、適切な場所でeuc-jpのかわりにeuc-jp-winと唱えるのが効 くって噂です。
補足
ありがとうございます。 >> 処理系にWindowsが混入 このWindowsとは次のどの段階なのでしょうかね? 1)サーバーのOS 2)プログラマーのパソコンのOS(私の場合Win-XP) 3)サイト訪問者のパソコンのOS 契約のサーバーはUNIX系なので 1) はないとして、 2) と 3) はどっちなのでしょうか。 もし 2) なら、私のPCがMacなら EUCJP-win はいらないことになりますし… 3) なら EUCJP-win は常時必須でしょうし…
- Suzi
- ベストアンサー率38% (130/334)
$str = mb_convert_encoding( $str, 'EUC-JP', 'ASCII,JIS,UTF-8,EUC-JP,SJIS' ); ではどうですか。
補足
なるほど!eucjp-win で解決しました。 ↓ウィキペディアによると規格作りの段階で勘違いがおきているようですね… http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80%E3%83%83%E3%82%B7%E3%83%A5#Unicode.E3.81.AB.E9.96.A2.E9.80.A3.E3.81.99.E3.82.8B.E5.95.8F.E9.A1.8C 今後は"EUC-JP"と記述すべき所は全て "EUCJP-win" でいこうかなと思いますがどうでしょうね? "EUCJP-win" を使ってはいけない場合ってあるんでしょうかね? ありがとうございました。