• ベストアンサー

なぜ文字化けしないのでしょうか?

Windows Me(shift_jis)とFedoraCore4(utf-8)のPCのブラウザに以下のFedoraCoreのPCに配置してあるgomi.php(utf-8で記載)を表示させて 入力欄に「お元気ですか。」と日本語を入れてもその応答が文字化けしません FC4はutf-8なのでshift_jisのWindows Meでは文字化けするはずですがしませんがどうしてでしょうか? gomi.php -------------------------------------------------------- <?php $in=isset($_POST['in'])?$_POST['in']:'bad'; echo '<?xml version="1.0" encoding="utf-8"?>'; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja"> <head> <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> <title>test</title> </head><body> <p><?= $in ?></p> <form method="post" action="<?= $_SERVER['PHP_SELF'] ?>"> <input type="text" name="in"/> <input type="submit" value="送信"/> </form> </body></html>

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

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答No.3

>shift_jisでおくってもPHPに入ってくる段階ではutf-8になるのでOKということですね Windowsでもutf-8のページからは最初からちゃんとutf-8で送ってくれるということです。 EUC-JPのページからはEUC-JPでShift_JISのページからはShift_JISで送るようになっています。 >Perlの場合文字変換しなければならなかった理由は何でしょうか? 自分はPerlでも実際は文字変換する必要はないと思っています。 Perlでjcode.plの部分を削除してもおそらくほとんどのスクリプトで文字化けは起こらないでしょう。

guuman
質問者

お礼

ありがとうございます jcode.plはいらなかったのですね とにかく入れていたのでPHPも変換しなければならないものと思っていました PHPでもPerlでも変換の必要なしですね

その他の回答 (2)

回答No.2

#1の方が答えているので、補足を。 文字コードはブラウザが勝手に変換しますので、サーバ側が配信している文字コードとメタタグが一致しさえしていれば問題ありません。 <meta http-equiv="content-type" content="application/xhtml+xml; charset=utf-8"/> この場合は当然UTF-8ですね。 サーバ側とクライアント側の文字コードは何でもかまいません。でないと、クライアント側の文字コードを取得して、文字コードを変換して配信。。。というような事になってしまいますからね。サーバとクライアントの関係についてはほとんど心配無用です。 いっぽう、サーバ側では文字コードに対してはやはり気を使う必要があります(質問者はおそらくこの辺と混同しているのでは?)。 DBに保存したデータがSJISで、データを変換せずにHTMLをUTFで書き出したりすると文字化けがおこります。こういう場合にはmb_convert_encoding関数のようなものを使えば解決出来ます。また、最後にmb_http_output関数で文字コードを処理するという手もあります。 携帯サイト等ではSJIS意外は文字化けしてしまうので、PC向けにはEUCでも、携帯向けはSJISで、というような気遣いが必要です。

guuman
質問者

お礼

ありがとうございます shift_jisでおくってもPHPに入ってくる段階ではutf-8になるのでOKということですね PHPがutf-8を送ってもブラウザがutf-8用の表示をするので文字化けしないということですね PHPがブラウザが送ったものがutf-8ということならばPHPがデータベースに保管するデータもutf-8なのでサーバ側でも気を使う必要がないということですね? Perlの場合文字変換しなければならなかった理由は何でしょうか?

  • php504
  • ベストアンサー率42% (926/2160)
回答No.1

出力する文字コードはブラウザが決めるのでWindowsかLinuxかといったOSは関係ありません。 多くのPC用ブラウザが表示した文字コードで自動的に出力もしてくれるので文字化けは起こりにくくなっています。

guuman
質問者

補足

ありがとうございます perlではcgi-lib.plなどのような文字コード変換サブルーチンを使ったりしますがPHPはそんなことしなくてもよいのでしょうか? Meのブラウザで送信したデータをFC4のgomi.phpで受信データをファイルに書き込んでもutf-8で書き込まれています shif_jis → utf-8 の変換はしなくてもよいのでしょうか?

関連するQ&A