ページの文字コードがUTF-8にならない

このQ&Aのポイント
  • PHP Version 5.1.6を使用している場合、ページの文字コードをUTF-8に設定しても、文字コードがShift_JISになることがあります。また、ページ上に何も表示されない可能性もあります。
  • 表示されない問題を解決するためには、表示させているテキストの上にもう1行テキストを追加することがあります。これにより、正常にUTF-8で表示される場合があります。
  • 原因として考えられるものは、PHPのバージョンや設定、またはWebサーバーの設定などがあります。正しい文字コードの設定を確認し、問題が解決されるかどうか確認してください。
回答を見る
  • ベストアンサー

ページの文字コードがUTF-8にならない

PHP Version 5.1.6を使っています。 次のようにして、文字コードをUTF-8にしてコードもUTF-8で保存してアップロードし、 ページを表示しようとするとなぜか文字コードがShift_JISになったままで 何も表示されません。 ただ表示させてる"aaa・・・"をもう1行加えるとちゃんとUTF-8になり表示されます。 これから考えられる原因はなんなのでしょうか? print "<html>\n"; print "<head>\n"; print "<title>サンプル</title>\n"; print "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n"; print "</head>\n"; print "<body>\n"; print "aaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>\n"; print "aaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>\n"; print "aaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>\n"; print "aaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>\n"; print "aaaaaaaaaaaaaaaaaaaaaaaaaaaa<br>\n"; print "</body>\n"; print "</html>\n";

  • PHP
  • 回答数2
  • ありがとう数2

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

  • ベストアンサー
noname#49664
noname#49664
回答No.2

>ただ1つなぜこのようにしたら表示されるようになったのか >理由が知りたいのですが、ご存知でしたら教えてもらえないでしょうか? 正確なところはわからないのですが・・・。私も、実際に開発をしている中でこの現象に気がついた感じですので。 ただ、この書き方ですと、<meta>タグで初めて文字コードの情報が渡されるわけです。ですので、それより前に日本語の文字が使われていると、ブラウザが無理やり文字コードを解釈しようとして、誤ってSJISと判断されてしまうんじゃないでしょうか。 ですので、個人的には、文字コードを指定する<meta>タグは、<head>の一番最初に書き、それより前に2バイト文字は書かない、と心がけています。

takagoo100
質問者

お礼

ご返答ありがとうございます。 なるほど、タイトルの日本語に原因があったわけですか・・・ たしかに誤認識が考えられますね。 ありがとうございました。

その他の回答 (1)

noname#49664
noname#49664
回答No.1

print "<meta http-equiv=\"content-type\" content=\"text/html; charset=UTF-8\" />\n"; これを、 print "<title>サンプル</title>\n"; この前に移動してもダメですか?

takagoo100
質問者

お礼

ご返答ありがとうございます。 そのようにしたらできました。ありがとうございます。 このまますぐ締め切ってポイントを割り振りたいのですが、 ただ1つなぜこのようにしたら表示されるようになったのか 理由が知りたいのですが、ご存知でしたら教えてもらえないでしょうか?

関連するQ&A

  • 文字コードをutf-8で保存したい

    ACCESS VBAで以下のプログラムを作成しましたが、 文字コードがシフトJISで作成されてしまいます。 utf-8でtest.htmlが出力されるようにしたいのですが、 可能でしょうか。 宜しくお願いします。 ********************* 作成したVBAのコード ********************* Private Sub 1_Click() Dim fNAME As String 'ファイル名格納用 fNAME = "c:\test.html" Open fNAME For Output As #1 Print #1, "<?xml version=""1.0"" encoding=""utf-8""?>" Print #1, "<!DOCTYPE html PUBLIC ""-//W3C//DTD XHTML 1.0 Transitional//EN"" ""http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"">" Print #1, "<html xmlns=""http://www.w3.org/1999/xhtml"" xml:lang=""ja"" lang=""ja"" xmlns:m=""http://www.seasar.org/maya"">" Print #1, "<head>" Print #1, "<meta http-equiv=""Content-Type"" content=""text/html; charset=utf-8"" />" Print #1, "<meta http-equiv=""Content-Language"" content=""ja"">" Print #1, "<meta http-equiv=""Content-Style-Type"" content=""text/css"">" Print #1, "<meta http-equiv=""Content-Script-Type"" content=""text/javascript"">" Print #1, "<meta name=""Keywords"" content=""キーワード1,キーワード2"" lang=""ja"" xml:lang=""ja"">" Print #1, "<meta name=""Description"" content=""コンテンツ内容"" lang=""ja"" xml:lang=""ja"">" Print #1, "</head>" Print #1, "<body>" Print #1, "<table>" Print #1, "…" Print #1, "…" Print #1, "</table>" Print #1, "</body>" Print #1, "</html>" Close #1 '閉じる End Sub *********************

  • POSTしたデータの文字コードがutf-8になる

    ヘッダーで文字コードをSJISになるように <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> と設定し、ボディ側のformで <form method="post" action="xxxxx"> <input type="text" name="n" value=""> <INPUT type="submit" value="実行"><br /> </form> とすると、サーバ側で受け取ったname="n"がutf-8になっています。 PHPですが、受け取った文字を echo mb_convert_encoding($_POST["n"],"SJIS","utf-8"): とSJISに変換し、表示すると、文字化けなく表示可能なのですが、そのままでは文字化けてしまいます。(表示側のHTMLも文字コードは上記と同様にヘッダーで文字コードを指定しSJISにしています。) 何が悪いのでしょうか?(特殊な環境としてはchrome+jquery mobileを使用しています。) よろしくお願いします。

    • ベストアンサー
    • HTML
  • 文字コードsjisをUTF8に書き換えたい

    CGIの勉強中の者です。 文字コードはSJISで保存しているCGIをUTF8コードに換えるには何が必要でしょうか? HTMLならmeta内をSJISからUTF8に変更し、TeraPadなどのテキストエディタでUTF8に保存すればオッケーなんですが。 CGIの場合はHTMLと違って、換えるには複雑なのでしょうか? CGIプログラムの中では以下の「sjis」を「UTF8」に書き換えし、UTF8で保存しましたけど、文字化けが出てます。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; 宜しくお願いします。

    • 締切済み
    • CGI
  • フレームページに文字が表示されなくて困ってます><

    フレームページに文字が表示されなくて困ってます>< フレームページは表示されるのですがmenu.html.htmlやcontents.html.htmlに書いた文字が表示されません どこが間違っているのでしょうか? ーーフレームページーー <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タトル</TITLE> </HEAD> <FRAMESET cols="100,*"> <FRAME name="menu.html.html" src="file:///D:/happystyle/menu.html.html"> <FRAME name="contents.html.html" src="file:///D:/happystyle/contents.html.html"> <NOFRAMES> <BODY> <P>このページを表示するには、フレームをサポートしているブラウザが必要です。</P> </BODY> </NOFRAMES> </FRAMESET> </HTML> ーーmenu.html.htmlーー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タイトル</TITLE> </HEAD> <BODY> 画像置き場 </BODY> </HTML> ーーcontents.html.htmlーー <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>タイトル</TITLE> </HEAD> <BODY> 画像表示 </BODY> </HTML> というHTMLを書きました! フレームに表示させたいページのHTMLはフレームと同じフォルダに入っているのですがこれと関係ありますか? どこがおかしいのかまったくわからないです 教えてください!

  • cgi出力での文字コードについて

    下記のソースをsjisで作っていて、出力するdata.txtをuft-8で保存したいです。 どのようにすればよいでしょうか? 下記ソースでは、data.txtはsjisになっています。 尚、htmlはsjisなのでそのまま使用したいです。 どなたか教えてください。 宜しくお願いします。 ############################# #!/usr/local/bin/perl require 'jcode.pl'; require 'cgi-lib.pl'; &ReadParse; $datafile='data.txt'; ←これの保存のみutf-8にしたい open(FH,">$datafile"); print FH "$in{'name'}"; close(FH); rint "Content-type:text/html\n\n"; print "<meta http-equiv='Content-Type' content='text/html; charset=Shift_JIS'>"; print "<html><head></head><title>テスト</title><body>\n"; print "<center>入力完了しました。</center><hr /><br>\n"; print "<b>名前:</b>$in{'name'}<br>\n"; print "<hr />\n"; print "</body></html>";

    • 締切済み
    • CGI
  • 文字コードってUTF-8が主流に?

    文字コードについては、UTF-8が主流になりつつあるってネットで観ました。 文字コードを検索すると次のような説明があります。 (UTF-8のエンコード) UTF-8は、UnicodeとASCIIコードを混在させるための規格です。 (シフトJISコード) シフトJISコードは、SJISとも呼び、Microsoft社が決めたコードでWindows95やMS-DOSやMacなどで使用されています。 その上で質問です。 1、 UTF-8が主流になるってことは、Windows、MacがUTF-8に方向転換するってことでしょうか? 2、 仮にUTF-8が主流になっても、サイトに <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> と記述していれば文字化けなく表示されるのでしょうか? 今の時点では判断できない質問なのでしょうか・・

  • UTF-8で文字化けしないようにするには?

    Shift-jisのページだったのですがリニューアルを機に文字コードを utf-8に変更してページを作っています。 メールフォーム用のcgiは以前と同じものを使いたいのですがページを utf-8で作ったために送信すると文字化けしてしまいます。 cgi自体をutf-8で保存しましたが同じ結果でした・・・ 確認ページがあるわけでもなく必須の項目が埋まっていれば送信するような シンプルなものなのですがutf-8で文字化けしないようにするには どのように変更したらいいのでしょうか? ソースは以下の通りです。 #!/usr/bin/perl require "jcode.pl"; require "mimew.pl"; $SENDMAIL = '/usr/sbin/sendmail'; $MAILTO = 'mail@example.com'; $MAILSUBJECT = 'メールフォームより'; $query = $ENV{'QUERY_STRING'}; foreach $pair (split(/&/, $query)) { ($key, $value) = split(/=/, $pair); $value =~ tr/+/ /; $value =~ s/%([0-9a-fA-F][0-9a-fA-F])/chr(hex($1))/eg; $form{$key} = $value; } $msg .= "----- 連絡先 -----\n"; ~~フォーム処理につき省略~~ if ($bad_input) { print <<END; Content-type: text/html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>エラー</title> </head> <body> <center> <h1>エラー</h1> <div>必須項目が入力されていません。</div> </center> </body> </html> END }else { $mail_to = mimeencode($MAILTO); $mail_from = mimeencode($form{'mail'}); $mail_subject = mimeencode($MAILSUBJECT); $body = jcode::jis($msg); $head = <<END; To: $mail_to From: $mail_from Subject: $mail_subject Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-2022-JP END open (MAIL, "| $SENDMAIL -i -t -f $form{'mail'}") or die("Error: Can't open pipe for sendmail"); print MAIL $head, $body; close MAIL; print <<END; Content-type: text/html <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>送信完了</title> </head> <body> <center> <h1>送信完了</h1> <div>下記の内容で送信しました.</div> <textarea cols="48" rows="24"> $msg </textarea> </center> </body> </html> END }

    • 締切済み
    • CGI
  • 文字コードについて

    外国にあるフリーのテンプレートを使ってみたいのですが文字化けしてしまい困っています。 初期は <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="EU" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> でしたが下のように書き換えたのですが? <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="jp" lang="EUC-JP" /> <head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" /> Flashだからでしょうか index.htmlとは別にtxt.htmlの2つのhtmlがあるのですがtxt.htmlに表示内容が載っています。 どうすれば文字コードを変えることができるのでしょうか? http://www.flashtemplatesdesign.com/free_flash_templates/metamorph_flash98/ ※上記URLは著作権者に帰属します。 詳しい方よろしくお願いします。

  • perlのcgiが文字化けします。

    perlを使ったcgiを作ろうと思い、こんなプログラムを書いてみたのですが、htmlのタグに囲まれた部分の日本語が文字化けしてしましいます。ファイルの文字列は上手く表示できるのですが… どうすればいいでしょうか。 文字コード判別をしてみたところ、このプログラム自体はShift-JISで書かれているようです。 開いているファイルはutf-8のようです。 #!/usr/bin/perl #ヘッダの表示 print "Content-Type: text/html; charset=utf-8\n\n"; print "<html>\n"; print "<head><title>掲示板</title></head>\n";#これが文字化け print "<body>\n"; print "<input type=\"text\" name=\"mail\" size=\"20\" value=\"\"><br>\n"; print "メッセージ<br>\n";#これも文字化け my $File = 'party0339.html'; if (-e $File) { #####@ファイルを開く…上でファイルが存在してることを確認して開けない場合はエラーメッセージ open(FF,"<:utf8",$File) or die "ファイル:$File を開けない $! \n"; my @FILE = <FF>; close (FF); ####@読み込んだデータを$Dataに格納する foreach (@FILE) { $Data = $_; print "$Data<br>\n"; } } #フッタの表示 print "</body>\n"; print "</html>\n"; exit (); 対策や原因などを教えてくださるとありがたいです。よろしくお願いします。

  • 文字コード

    HPを作る際は <meta http-equiv="content-type" content="text/html;charset=shift_jis"> と <meta http-equiv="content-type" content="text/html;charset=utf-8"> のどちらにすればいいのでしょうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう