重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

【GOLF me!】初月無料お試し

PHPで
mb_convert_encodingを用いて
UTF-8で記述されたPHPスクリプトファイルの
PHPファイル内の任意の文字列の文字コードを変換する場合、

$value = "文字列";
$str = mb_convert_encoding($value ,"UTF8","UTF8");
print $str;

この場合、特に問題なく、変換がおこなわれます
というか、意味のないで処理ではありますが。

次に
$str = mb_convert_encoding($value,"EUC-JP","EUC-JP");
とした場合
うまく文字列の文字コードの変換がおこなわれず
出力内容は文字化けします。

次に
$str = mb_convert_encoding($value,"SJIS","SJIS");

とした場合 EUC-JPと同じく文字コード変換に失敗し
文字化けするだろうとおもいましたが
おもいのほかブラウザの文字コードUTF-8のままで文字化けしていないのです。

これはどういう現象でしょうか?
たとえば一つ目は UTF8で記述されたPHPファイルの文字列をそのままUTF-8として
変換されせるのですから、問題ないはずです。結果問題ありません。

二つ目は UTF-8でかかれたPHPファイルの文字列をEUC-JPでかかれたファイルとして
EUC-JPという文字コードに変換しなさいという命令ですよね?
これは思う通りにいかなくて文字化けした文字列が出力されるのはわかるのですが

三つ目はUTF8で記述された文字列をSHIFT-JISとしてSHIFT-JISに変換しようとしているにも
かかわらず、結果問題なくブラウザのUTF-8で文字列と表示されてしまいます。

これはいったいどういう事なのでしょうか?

これが仮に
$str = mb_convert_encoding($value,"SJIS","UTF-8");
なら話は簡単んです。

UTF-8で記述されたファイルの任意の文字列を
UTF8からSJISに変換しようとしているのですから問題なく
SHIFT-JISでエンコーディングされた文字列が帰ってくるはずです。

こ乃原因をご存知のかたよろしくご教授ください。
お願い致します。

A 回答 (1件)

元のPHPファイルがUTF-8で、UTF-8→UTF-8の場合はなんら変換されないのはご記載のとおりですが、SJIS→SJISの場合でも、SJISとは判定されない文字(UTF-8で書いてあるんですから)については変換の対象外と判定されて、元のUTF-8のままで出力されたものと思います。



EUC-JPの場合は、たまたまEUC-JPとも解釈できる文字だったので、実はUTF-8であるにもかかわらずEUC-JPと見なされて、それがEUC-JPで出力され、文字化けになったものでしょう。
    • good
    • 0

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