• ベストアンサー

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

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>

  • guuman
  • お礼率86% (1043/1206)
  • PHP
  • 回答数3
  • ありがとう数2

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

  • ベストアンサー
  • 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

  • サイトの文字化け防止

    サイトがたまに文字化けして  「?R???e???c?E???j???[」こんな感じになってしまいことがあります。 これを防止するにはHTMLの文字宣言をどう書けばいいのでしょうか? HTMLをちょっと忘れ気味なんですが、ヘッダーの前にこのように書きました。 <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" />

    • ベストアンサー
    • HTML
  • 文字コードについて

    <?xml version="1.0" encoding="Shift_JIS" ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" lang="ja" xml:lang="ja" id="sixapart-standard"> <head> <meta http-equiv="Content-Type" content="text/html" charset="Shift_JIS" /> </head> というように文字コード指定をしているのですが、なぜか文字コードがUTFになり、shift jisにすると文字化けしてしまいます。 どなたかアドバイスお願いいたします。

    • ベストアンサー
    • HTML
  • i-modeでxhtmlをみるには、、

    Perlからxhtmlをはきだして、i-modeで見れるようにしたいのですが、 表示がうまくいきません。 ヘッダーは Content-type: text/html; charset=Shift_JIS <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-Transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> こんな感じです。 「Content-type: text/html; charset=Shift_JIS」の部分を 「Content-Type: application/xhtml+xml」や 「Content-Type: application/xhtml」等でやっても表示されませんでした。 もし分かる方がいましたら教えてください。 宜しくお願いします。

    • 締切済み
    • XML
  • 携帯サイト制作をしておりまして、XHTML+Shift_JISで出力で

    携帯サイト制作をしておりまして、XHTML+Shift_JISで出力できずかなり悩まされています。なんでも結構ですのでヒントをいただけましたら幸いです。。 【現象1】 文字化けする。DoCoMoとFireFoxでいずれもUTF-8のコードをShift_JISとして表示しようとしている。 (PHPの記述) header("Content-Type: application/xhtml+xml; charset=Shift_JIS"); mb_internal_encoding('UTF-8'); mb_http_output('Shift_JIS') ob_start('mb_output_handler'); (XHTMLの記述) <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd"> <html xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=shift_jis" /> 【現象2】 PHPでShift_JISで出力できているが、DoCoMoで見るとXHTMLではなくHTMLと解釈されてしまっている。なので<div style="background-color..といったものが無効になっている。 (PHPの記述) mb_internal_encoding('UTF-8'); mb_http_output('Shift_JIS') ob_start('mb_output_handler'); (XHTMLの記述) 現象1と同じ。 【現象3】 DoCoMoとFirefoxいずれも何も出力されなくなる。ソースも表示できない。 (PHPの記述) 現象2と同じ。 (XHTMLの記述) <?xml version="1.0" encoding="Shift_JIS"?> <!DOCTYPE html PUBLIC "-//i-mode group (ja)//DTD XHTML i-XHTML(Locale/Ver.=ja/1.1) 1.0//EN" "i-xhtml_4ja_10.dtd"> <html xml:lang="ja"> <head> <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=shift_jis" /> 【開発条件】 PHP=PHP Version 5.1.6 言語=XHTML サーバー=XSERVER 確認キャリア=DoCoMo N904i phpinfoの内容 output_buffering no value no value output_handler no value no value default_charset no value no value mbstring.detect_order auto auto mbstring.encoding_translation Off Off mbstring.func_overload 0 0 mbstring.http_input auto auto mbstring.http_output SJIS SJIS mbstring.internal_encoding EUC-JP EUC-JP mbstring.language Japanese Japanese mbstring.strict_detection Off Off mbstring.substitute_character no value no value ●謎1 header("Content-Type: application/xhtml+xml; charset=Shift_JIS");をつけると なぜShift_JISに変換してくれなくなるのでしょう? ●謎2 <?xml version="1.0" encoding="Shift_JIS"?> をつけると何も出力されなくなるのはなぜでしょう?

    • ベストアンサー
    • PHP
  • PHPのチェックボックスでforeachの警告出る

    UbuntuにXPMPPを入れてPHPの勉強してます。複数選択可能なチェックボックスの値を取得しようとしているのですが送信して受信側のページを開くと「Warning: Invalid argument supplied for foreach()」が出ます。正しく複数選択のチェックボックスの値を送受信する方法を教えてください。なお、入力ミスかと思い、http://www.7key.jp/hp/php/memo5.htmlのコピペをしてみましたが警告が出続けます。以下にそのページのソースを示します。 送信側のページのソースは次のようになっています。 <?php echo '<?xml version="1.0" encoding="UTF-8"?> '; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>送信</title> </head> <body> <form action="response.php" method="post"> <input type="checkbox" name="sample" value="1" checked="checked"> <input type="checkbox" name="sample" value="2"> <input type="checkbox" name="sample" value="3"> <input type="submit" value="sending" /> </form> </body> </html> 受信側のソースは次のようになっています。 <?php echo '<?xml version="1.0" encoding="UTF-8"?> '; ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>受信</title> </head> <body> <?php foreach($_POST['sample'] as $key => $val){ echo "$key : $val \n"; } ?> </body> </html>

    • 締切済み
    • PHP
  • WAMP ローカル環境で突然文字化けするように

    WAMP初級者です。 いままでPEAR::DBを使って作っていたサイトがあり、PDOを使うように修正をしているのですが、いろいろ試しても画面が真っ白になってしまうようになりました。 そこで、いったんPDOを理解するために、下記のような小さなプログラムを作ってしっかり理解してから、取り組もうといろいろ試しましたが、やっぱり画面が真っ白になってしまいました。 なので、今度は念のため、単純にPOSTで受け取った情報を単純に表示するだけのコードでためしたところ、今度はなぜか文字化けするようになってしまいました。。 「???」のような表示ではなく、「・・・」のような表示です。 いままでPEAR::DBを使っていたサイトは(過去に文字化けで苦労した時代はありましたが)いまはちゃんとUTF-8で統一したので、文字化けは解消されています。 どこか設定をいじった記憶もなく、突然初歩的なPHPも動いてくれなくなってしまって途方にくれています。PEAR::DBを使ってちゃんと動いていたサイトは、文字化けしません。 今回やったことのどこが悪いのか、路頭にまよっています。 どなたかヒントをいただけないでしょうか? 環境はPHP5.2(古いので、この件が片付いたらバージョンアップする予定です)、Windowsです。 ●サンプルで作ったHTML <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <form action = "for_pdo_test2.php" method="post"> キーワード:<input type="text" name="keyword"> <input type="submit" name="exec" value="検索"> </form> </body> </html> ●下記がfor_pod_test2.phpです (コメントアウトしている箇所がPDOの動作確認用につくったものです) <?php header("Content-Type:text/html;charset=UTF-8"); error_reporting(4); $keyword=$_POST['keyword']; /* try{ $query="SELECT * FROM book where Name like :name"; $connection=new PDO('mysql:host=localhost;dbname=book_db','root','root'); $stmt=$connection->prepare($query); $stmt->bindValue(":name","'%$keyword%'",PDO::PARAM_STR); $stmt->execute(); while($result = $stmt->fetch(PDO::FETCH_ASSOC)){ print($result['BID']); print($result['Name'].'<br>'); } }catch(PDOException $e){ print('Error:'.$e->getMessage()); die(); } */ ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> </head> <body> <?php echo "aaa"; ?><br/> <?php echo $keyword; ?> </body> </html> 以上です。 検索をして飛んだ先で aaa ・・・ と表示されてしまいます。 よろしくお願いいたします。

    • ベストアンサー
    • PHP
  • PHP 問い合わせフォームの文字化け

    はじめまして。 会員648です。 Websiteを作成し、問い合わせフォームで 入力をHTML、チェック・確認画面、送信をPHPで 作成しました。 初心者なので、サイトでの作成事例をまねております。また文字化けは UTF-8を書けば良い ということも サイトにあったので、とりあえずそうしました。 しかし 他のHTMLは正常に表示しますが、HTMLの入力画面、PHPチェック画面 すべて  文字化けします。 入力画面は <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <form method="post" action="check.php"> ですが 文字化け表示となります。 内容確認画面は check.php で <?php // フォームデータが空の場合は処理終了 if (empty($_POST)) { echo "処理終了"; exit; } // セッションの開始 session_start(); ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> で始まります。 詳しくPHPを知りませんので、どこが問題なのか 教えていただけませんでしょうか。 なお、テスト環境は 自分のPCで Xampp をインストールして、htdocs 配下に すべての HTML, CSS, image,php を 置いております。 なにとぞ よろしくお願いいたします。

    • 締切済み
    • PHP
  • CakePHP文字化けについて

    お世話になります。基本的な質問で申し訳ないのですが、CakePHPのインストールをしたのですが、ブラウザ経由の文字化けが発生しており、困っております。 \app\webrootに以下のHTMLファイルを設置し、ブラウザ経由でアクセスしたのですが、エンコードUTF-8でアクセスすると文字化けが発生してしまいます。エンコードをShift-JISに指定しなおしたところ問題なく表示されるのです。charset=utf-8を指定しているにも関わらず、Shift-JISで表示されるのはどうしてですか。また、UTF-8で正常に表示するには、追加で設定が必要になるのでしょうか。 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>    <title>Hello</title> </head> <body> <p>これは、テストページです。</p> </body> </html>

    • 締切済み
    • PHP
  • 携帯サイトで文字コード指定のメタタグは必要?

    phpで携帯サイトを作っています。 ソースコードをutf-8で作成して、表示する際にShift_JISに変換して出力しています。 ソースコード中の<head>の中には、 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> というタグを記述しています。 この、ソースコードをDreamweaverで編集したいのですが、Shift_JISで開こうとしてしまい、 文字化けしてしまいます。 コメントで先頭に以下のように記述すると、utf-8で開く、というtipsのようなものを 見つけたので、その通りにしたところ、開くときはOKです。 <?php //<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> ?> ですが、保存すると、 Shift_JISで保存してしまいます。 多分、 <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=Shift_JIS" /> というほうを認識してしまっているんだと思うのですが、そこで質問です。 携帯端末では、この指定は必須のものでしょうか? PHPからは、HTTPヘッダで文字コードも指定しているので、いらない筈だと思うのですが、 携帯ブラウザの中には、メタタグが必須のものもあるのかどうかが知りたいです。 また、Dreamweaverで、utf-8を指定して保存する方法があれば、そちらでもかまいません。 Dreamweaver は cs3(windows) を使っています。 どうぞよろしくお願い致します。

    • ベストアンサー
    • PHP
  • 初歩的な質問で恐縮ですが、教えてください。

    すみませんが、教えてください。 入力フォームでデータが送れなくて、困っています。 下のコードに問題点はあるのでしょうか? 自分では、分からないので、よろしくお願いいたします。 test1.php------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> </head> <body> <form method="post" enctype="multipart/form-data" action="./test2.php"> <input type="text" name="fmTitle" ><br /> <input type="submit" value="次へ" > </form> </body> test2.php-------------------------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> </head> <body> <?= $fmTitle . "<br />" ?> </body>

    • ベストアンサー
    • PHP

専門家に質問してみよう