• ベストアンサー

【PHP】mb_convert_encoding()で "~" 等が化ける

PHP5.2.4 使用者です。(レンタルサーバー) 例えば、サーバー及び記述の文字コードがEUC-JPだとして、 $str = "~"; $str = mb_convert_encoding($str , 'UTF-8', 'EUC-JP'); とすると "?" に化けてしまいます。 調べたところ、マルチバイト文字の ~ ¬ ∥ - ¢ £ \ は対応するコードがないから化けるとか… "~" はよく使う文字ですし、そんな簡単に化けられては困るんですが… プロの方はこういうのどう処理してるのでしょう。 お詳しい方、よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.2

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

ikataro
質問者

補足

なるほど!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" を使ってはいけない場合ってあるんでしょうかね? ありがとうございました。

その他の回答 (2)

回答No.3

処理系にWindowsが混入してるとそういう現象が起こるらしいです ね。Windowsが波ダッシュと全角チルダを混同してることと、euc-jp には全角チルダなんて無いことが諸悪の根源とか。 どこかで全角チルダを波ダッシュに変換してやる必要があるわけで すが、適切な場所でeuc-jpのかわりにeuc-jp-winと唱えるのが効 くって噂です。

ikataro
質問者

補足

ありがとうございます。 >> 処理系に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)
回答No.1

$str = mb_convert_encoding( $str, 'EUC-JP', 'ASCII,JIS,UTF-8,EUC-JP,SJIS' ); ではどうですか。

関連するQ&A