プロが教える店舗&オフィスのセキュリティ対策術

PHP5.2.4 使用者です。(レンタルサーバー)

例えば、サーバー及び記述の文字コードがEUC-JPだとして、

$str = "~";
$str = mb_convert_encoding($str , 'UTF-8', 'EUC-JP');

とすると "?" に化けてしまいます。
調べたところ、マルチバイト文字の

~ ¬ ∥ - ¢ £ \

は対応するコードがないから化けるとか…
"~" はよく使う文字ですし、そんな簡単に化けられては困るんですが…
プロの方はこういうのどう処理してるのでしょう。
お詳しい方、よろしくお願いいたします。

A 回答 (3件)

euc-jp じゃなくてeucjp-win にしてみてください。



[php] mb_convert_encoding と UTF-8 の誤変換問題 ( しゃいん☆のブログ| 名古屋市 Webシステム開発 サーバ構築 ネットワーク構築 株式会社コネクティボ )
http://shain.blog.conextivo.com/2007/07/php_mb_c …

根っこが深い問題なんです。実は。


404 Blog Not Found:Encode - 規格のバグまでは直せません
http://blog.livedoor.jp/dankogai/archives/504887 …

この回答への補足

なるほど!eucjp-win で解決しました。

↓ウィキペディアによると規格作りの段階で勘違いがおきているようですね…
http://ja.wikipedia.org/wiki/%E6%B3%A2%E3%83%80% …

今後は"EUC-JP"と記述すべき所は全て "EUCJP-win" でいこうかなと思いますがどうでしょうね?
"EUCJP-win" を使ってはいけない場合ってあるんでしょうかね?
ありがとうございました。

補足日時:2008/09/19 00:23
    • good
    • 0

処理系に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 は常時必須でしょうし…

補足日時:2008/09/19 00:41
    • good
    • 0

$str = mb_convert_encoding( $str, 'EUC-JP', 'ASCII,JIS,UTF-8,EUC-JP,SJIS' );



ではどうですか。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!