• ベストアンサー

CGI 文字化け

CGIプログラムでうまく日本語が表示できません。 表示できても、余分な文字列が入ってしまいます。ソースは以下です。 #!/usr/bin/perl -w print "Content-type: text/html\n\n"; use DBI; use CGI; $q = new CGI; print $q->header; $no = $q->param('no'); $program= $q->param('program'); my $UDBNAME=""; my $USERNAME=""; my $USERPASS=""; my $db = DBI->connect("DBI:Pg:dbname=$UDBNAME",$USERNAME,$USERPASS); my $sth=$db->prepare(" select * from server where no = $no "); $sth->execute; my $num_rows=$sth->rows; if($num_rows <= 0){ print <<"_HTML_"; <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=ecu-jp"> </HEAD> <BODY> <TITLE>Server Search</TITLE> <img src = "http:///Logo.gif"> <BR> <HR width="90%"> <BR> <BR> 文字化け確認! <BR> <BR> <HR width="90%"> </HTML> _HTML_ 以上のようなプログラムをブラウザーで表示させると 先頭行に  Content-Type: text/html; charset=ISO-8859-1 と表示されてしまいます。文字化けはしないのですが、余計な Content-Type: text/html; charset=ISO-8859-1 はどうしたら取り除けるのでしょうか? ちなみにapacheの設定も AddLanguage ja .ja を先頭に LanguagePriority ja en ca cs AddCharset EUC-JP .euc-jp .cgi を先頭に のように設定しております。 もし、お分かりの方教えてください。

  • gahau
  • お礼率15% (12/80)
  • CGI
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • trisagion
  • ベストアンサー率68% (15/22)
回答No.2

プログラムの2行目で print "Content-type: text/html\n\n"; と出力しているのに、6行目で print $q->header; と再びヘッダーを出力しているのが Content-Type: text/html; charset=ISO-8859-1 と表示される原因だと思います。

gahau
質問者

お礼

ご回答ありがとうございました。 無事解決しました。

その他の回答 (1)

回答No.1

> print "Content-type: text/html\n\n"; > print $q->header; HTTPヘッダがだぶってます。

gahau
質問者

お礼

ご回答ありがとうございました。 無事解決しました。

関連するQ&A

  • CGIで作ったHTMLの文字化けについて

    CGIのヘッダを "Content-type: text/html\n\n" として、HTMLをブラウザに出力するcgiを作っているのですが、 「表示」という文字が「侮ヲ」と文字化けしてしまいます。 HTMLの<head></head>内には print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift-jis\">"; と記述して日本語を指定しています。 文字化けの原因がまったくわかりません。 心当たりありませんでしょうか?

    • ベストアンサー
    • Perl
  • CGIで文字化けする

    フリーのCGIを使って掲示板を設置しました。 CGIの中身に若干手を加えてカスタマイズしているのですが、一部の文字が化けてしまいます。 CGIの中で、HTMLとして出力させる部分に、他のページへのリンクなどを埋め込んだのですが、その一部が文字化けしています。 文字化けする文字を記事として掲示板で投稿すると化けません。 何をチェックすればいいのでしょうか? ちなみに、<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />とヘッダーに書いています。 その他、不足している情報があればご指摘ください。

    • ベストアンサー
    • CGI
  • 応募フォームの文字化けは文字コードのせい?

    今まで、HPに応募フォームを設置していて問題なくメッセージ等が送信されていたのですが、このたびdreamweaverを使うようになって文字コードを変換したところ、応募フォームから送信されるメッセージが文字化けするようになりました。 素人なので原因がわかりません。 HTMLファイルには、<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html lang="ja"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8">とかかれており、以前はShift_JISを使ってました。 ちなみにCGIファイルにはprint "content=\"text/html; charset=x-sjis\">\n";という文字列があります。 どこをどうすればよいのでしょうか? なお、CSS外部ファイルの先頭には @charset "utf-8"; /* CSS Document */ といった文字列があります。 アドバイスいただけると助かります。

  • 日本語だけ文字化け

    Solaris上で、Perl(5.005_03)を用い、DB(Oracle10.2.0)のデータを抽出しブラウザで表示させた際に、日本語のみが??????という感じに、半角の"?"で表示されてしまいます。 Solaris上で、cgiファイルを標準出力したり、Perlのデバッガで表示させると問題なく日本語表示されます。また、ブラウザでもDBから抽出した文字以外の日本語は問題なく表示されます。加えて、OUT関数を用いても、やはりDBから抽出した値のみ?表記になってしまいます。 下記に利用したCGIを書き出してみます。(DB接続以降の記述のみ) ------------------ここから--------------------- my $dbh = DBI->connect($datasrc, $username, $password) || die DBI::errstr; my $sql = "SELECT AAA FROM XXXXX"; my $sth = $dbh->prepare($sql) || die $dbh->errstr; $sth->execute || die $dbh->errstr; print "Content-type: text/html\n\n"; print "<HTML>\n<HEAD>\n"; print "<TITLE>DBテスト</TITLE>\n"; print "<meta http-equiv=Content-Type content=text/html; charset=Shift_JIS>\n"; print "</HEAD>\n<BODY>\n"; print "DB接続テスト<P>\n"; # display results my @results; my $count; while($count < 2) { @results = $sth->fetchrow; print "あああ"; print "@results\n<P>"; print ,$count++,"行目\n"; } $sth->finish; $dbh->disconnect; print "\n</BODY>\n</HTML>\n"; ------------------ここまで--------------------- ブラウザ表示の結果は、 DB接続テスト ???????? ???????? となってしまいます。"DB接続テスト"は正常に表示されて、print "@results\n<P>";が????に置換わり、"行目\n"が非出力となってしまいます。DB(AAA列)の値が数字や英数は問題なくブラウザ表示されます。 日本語全てが一律文字が置き換わるのであれば、文字コードの問題だと疑うのですが、SELECT文の日本語のみが、?というのはどうしてなのかがわかりません。また、Solaris上でのデバッガーや標準出力は問題なく、ブラウザやOUT関数でファイルに書き出すと、?になるのもわかりません。 もし、ご存知の方がいらっしゃいましたら、教えてくださいm(_ _)m

  • 文字化け

    下記のようなcgiスクリプトがあり、test1.cgi から リンクの test2.cgiを呼ぶと 「リンドウ」が文字化けしてしまいます。 文字化けしないようにするには、どうしたらいいでしょうか。 Perl cgi 初心者です。 --------test1.cgi----------------------------------------- #!/usr/bin/perl print "Content-Type: text/html; charset=EUC-JP\n\n"; $name="リンドウ"; print "name=$name<br>"; print "<a href=\"test2.cgi?aaa,${name},bbb\">test2.cgi</a>\n"; ---------test2.cgi------------------------------------------------- #!/usr/bin/perl print "Content-type: text/html; charset=EUC_JP\n\n"; $query = $ENV{'QUERY_STRING'}; print "query=$query\n";

    • ベストアンサー
    • CGI
  • 配列に入った変数を二度使いたい

    perlでDBデータをセレクトし表示させるプログラムで 以下のように一回目のforループでは正常に表示されます。 二度目に表示させようとすると何もデータがなくなっているようです。 print でも、もちろんなにも表示しません。 配列名を変えてもだめでした。とこが原因なのかわかりません。 ステートメントハンドルとかが関係あるのでしょうか? いろいろ調べたのですが、ちょっとわかりませんでした。 申し訳ないのですが、教えてください。 話をまとめるとDBからセレクトした同じ行のデータを2回表示させたいということです。 よろしくお願いします。 my $db = DBI->connect("DBI:Pg:dbname=$UDBNAME",$USERNAME,$USERPASS); my $sth=$db->prepare(" select * from server where no = $no "); $sth->execute; #一回目 for ((my $count)=0; $count<$num_rows;$count++){ my @ar=$sth->fetchrow_array; #二回目 for ((my $count)=0; $count<$num_rows;$count++){ my @ar=$sth->fetchrow_array;

    • ベストアンサー
    • Perl
  • CGIにおいて、エンコード・文字化けの対処方法

    以下のようにCGIを記述しております。(本日勉強したてで間違いだらけでしたら申し訳ございません。) ============= #!/usr/local/bin/perl print "Content-type: text/html; charset=EUC-JP\n"; print "\n"; print "<html>\n"; print "<title>Hello CGI</title>\n"; print "<body>\n"; print "<h1>Hello CGI!</h1>\n"; print "<hr>\n"; print qq( 上記のCGIファイルのメッセージは、次のように記述しました。<br><br> #!/usr/local/bin/perl<br><br> print "Content-type: text/html\\n";<br> print "\\n";<br> print "&lt;html&gt;\\n";<br> print "&lt;title&gt;Hello CGI&lt;/title&gt;\\n";<br> print "&lt;body&gt;\\n";<br> print "&lt;h1&gt;Hello CGI!&lt;/h1&gt;\\n";<br> print "&lt;/body&gt;";<br> print "&lt;/html&gt;";<br><br> ); print "</body>"; print "</html>"; =========== 以上をIE7で表示しますと、エンコードが西ヨーロッパ言語になって文字化けを起こしてしまいます。 何か記述の仕方が間違っているのでしょうか。 よろしくお願いいたします。

    • ベストアンサー
    • CGI
  • 更新を繰り返すと文字化けが起きてしまいます...

    お世話になります PHP4でHPを作成しています 文字化けに関して質問させて下さい PHPで作成したページの更新をすると 5回に1回の割合で文字化けが発生してしまいます EUC-JPで作成したPHPファイルを表示するので ファイルの先頭に  <? header(\"Content-Type: text/html;charset=EUC-JP\"); ?>  <html lang=\"ja\">  <head>  <meta http-equiv=\"content-type\" content=\"text/html; charset=EUC-JP\">  <meta http-equiv=\"content-style-type\" content=\"text/css\">  <meta http-equiv=\"content-script-type\" content=\"text/javascript\"> と指定してから 他の処理が実行されるようにしているのですが…。 何回か更新を繰り返すと文字化けを起こしてしまいます。 文字化けを起こした時にソースを表示すると 日本語が正しく見れる状態になっていたので シフトJISになってしまっているようで… 宜しくお願いします

    • 締切済み
    • PHP
  • CGIでUTF-8指定しても printで文字化け

    お世話になります。 PerlのCGIに日本語を表示させる方法を理解していないみたいです。 <body> <form ACTION="obd.cgi" METHOD="GET" TARGET="_parent" NAME="kensaku"> <input type="checkbox" name="shinsei_jikan" id="ryoukai1" /> チェック1  <input type="checkbox" name="soushin" id="ryoukai2" /> チェック2 <a href="ueber_OBD.shtml"> <input type="image" src="../../images/button/OBD_durch_CASPA.jpg" width="380" height="206" name="button1"> </a> </form> </body> という簡単なフォームから、 テキストエディタで作製したCGI #!/usr/bin/perl use strict; use CGI; my $cgi = CGI->new; my $checkbox1 = $cgi->param('shinsei_jikan'); my $checkbox2 = $cgi->param('soushin'); # チェックボックスの状態を確認 if ($checkbox1 && $checkbox2) { # 両方にチェックが入っている場合の処理 print $cgi->redirect('show.html'); } else { # チェックが入っていない場合のエラーメッセージを表示 print $cgi->header('text/html'); print <<HTML; <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <title>エラー</title> </head> <body> <p>&nbsp;</p> <table width="80%" border="0" align="center" cellpadding="5"> <tr> <td>2つの確認事項にチェックを入れて送信して下さい。</td> </tr> </table> <p>&nbsp;</p> </body> </html> HTML } にデータを送ると、チェックボックス2つにチェックを入れなかった場合に表示されるようにした日本語文が文字化けしてしまいます。 CGIはUTF-8で保存してあるのでソースでも <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> というタグを入れてあるのですが、なぜでしょう? ブラウザで「表示」メニューから「テキストエンコーディングを修復」(Mac版Firefoxの場合)を選べば正しい日本語になるのですが、一般の利用者さんにこれをやって下さいと言うのはナンセンスなのでこんなことをしなくても誰にでも正常に表示されるようにしたいのですが、どうしたら良いでしょう? ご教示いただきたく、どうかよろしくお願い致します。

    • ベストアンサー
    • CGI
  • 文字化けがしてなりません

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <HTML lang="ja"> <HEAD> <META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=Shift_JIS"> </HEAD> <BODY> <H1>Hello World!</H1> </BODY> </HTML> を公開PCで表示させるとほとんどすべての文字が四角で表示されてしまい 正常に表示させるには右クリックメニューの 日本語(自動選択) をクリックしなければなりません どうしたら一発で日本語表示されるようになるでしょうか?

    • ベストアンサー
    • HTML

専門家に質問してみよう