PHPの文字コード変換について
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でエンコーディングされた文字列が帰ってくるはずです。
こ乃原因をご存知のかたよろしくご教授ください。
お願い致します。
お礼
ご返答ありがとうございます。 参考サイト読んでみます。
補足
質問者です。 ICUを使ってShift-jisで書かれた文字列をeuc-jpに変換したりはできました。ありがとうございます。 でですね、 "abc エンコード"という(Shift-jis?)文字列を ・Shift-jisで"abc+%83G%83%93%83R%81%5B%83h"、 ・euc-jpで"abc+%A5%A8%A5%F3%A5%B3%A1%BC%A5%C9"、 ・UTF-8で"abc+%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%89"、 のような感じにURL用にエンコードしたいのですが、どうしたらいいのか困ってます。 http://www.geocities.co.jp/SilkRoad/4511/vb/urlenc_c.htmみたいにするのが一般的ですかね?