• ベストアンサー

FireFox、Operaで出力するとhtmlソースが出てしまう

http://oshiete1.goo.ne.jp/kotaeru.php3?q=554339 を読んだのですが、きちんと text/htmlで出力しているにも関わらず、FireFox、Operaで開くとhtmlソースが出てしまいます。 (win IE、Mac Safariではhtmlとして(きちんと)開かれる) ソースは以下の通りです。 (テスト用で必ずエラーページを出力するようになっています。) --------------------- #!/usr/local/bin/perl require 'cgi-lib.pl'; require 'jcode.pl'; &ReadParse(*form); $userID = "$form{'id'}"."\n"; open(KEIJI,"<id.dat") || die "File Open Error"; @all = <KEIJI>; close(KEIJI); foreach(@all){ #ワードを配列に追加 push @wordList,$_; } $messageID = 0; foreach(@wordList){ if($userID eq $_){ $messageID = $count; last; } $count = $count + 1; } if($messageID eq 0){ &error_output; exit; } sub error_output{ print "Contest-type:text/html\n\n"; print << "EOM"; <!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN"> <html><head> <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <title>404 Not Found</title> </head><body> <h1>Not Found</h1> <p>The requested URL was not found on this server.</p> </body></html> EOM } ------------------------ 要は「このファイルはhtmlです」とプラウザーに 伝えれればいいとは思うのですが、もしお分かりの 方がいらっしゃいましたら、教えていただければ ありがたいです。 よろしくお願いいたします。

  • CGI
  • 回答数2
  • ありがとう数3

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

  • ベストアンサー
  • KamoPlat
  • ベストアンサー率46% (23/50)
回答No.2

MIMEタイプが「text/html」ではなく「text/plain」になっているせいでしょう。サーバが元々登録していないのか.htaccessで自分で変更しているのかな? わたしも詳しくないので(汗)

akira_
質問者

お礼

ありがとうございます、 確認したところ、「text/plain」では無く、「text/html」になっていました。

その他の回答 (1)

noname#20378
noname#20378
回答No.1

えと、私はPerlをかけない人間なので的外れかもしれませんが print "Conte s t-type:text/html\n\n" 「sじゃなくてn」というタイプミスではないかと。 と。 で、もし Content-Type: text/html; charset=Shift_JIS を吐き出すなら <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> の行は必要ないような気がします。 P.S.ところで・・・・本当にHTML"2.0"でいいのでしょうか?

akira_
質問者

お礼

すいません、「sじゃなくてn」に修正したら大丈夫になりました! <meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> も削除しても大丈夫でした。 HTML"2.0"の行も必要は無いですね・・。 どうもありがとうございました!

関連するQ&A

  • 【再】Cookieを使用してフォームで送信

    #!/usr/local/bin/perl # ライブラリ require 'cgi-lib.pl'; require 'jcode.pl'; require 'keiji_write_sub.pl'; # デコード &ReadParse(*form); # 名前・メッセージ欄のチェック if ($form{'name'} eq "" || $form{'message'} eq "") { # 名前・メッセージが空ならエラー &input_error; # 終了 exit; } else { # 名前・メッセージも空でないなら書込処理 # HTMLタグと衝突する記号を変換 $name = &henkan($form{'name'}); $mail = &henkan($form{'mail'}); $title = &henkan($form{'title'}); $message = &henkan($form{'message'}); $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得る $time = &jp_time; # データを1行に(区切りはコロン) $new_data = "$time:$name:$mail:$title:$message\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データ追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書込完了メッセ &write_ok; } というコードでdatファイルに書き込みしています。 この時に、名前などを1度入力したらCookieに記憶させて次からは自動で入るようにしたいのです。 あちこち検索して読んだりしたのですが、わからなくて…。 どなたか教えてください。

    • ベストアンサー
    • CGI
  • ファイルに書き込めない/ファイルの内容が消える

    編集機能を掲示板につけているところです。 テキストファイルの内容がまったく消えてしまうのです。 どうしてでしょうか? データ形式 314:2006年2月20日(月)22時31分:あああ:いいい:ううう 313:2006年2月20日(月)22時31分:あああ:いいい:ううう 312:2006年2月18日(土)23時18分:あああ:いいい:ううう #コード↓######################################## open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; @all = <KEIJI>; $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; #***** 文字列の置換 ***** $message =~ s/\r\n/<BR>/g; # 日本語表記の日時を得るサブルーチン $time = &jp_time if( $time eq '' ); # 重複があったら置き換えるルーチン foreach(@all){ $data = $_; chop $data; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); } push @all, $data; } die "File 'keijiban.dat' Open Error."; flock(KEIJI, 2); foreach (@all){ print KEIJI $_,"\n"; } flock(KEIJI, 8); close(KEIJI); ~~~~~~~~~~~~~~~~~~~~~~~~ どんどん手をつけていったら書きこめなくなってしまいました。最初は書き込めていたんですけど・・・。 真ん中あたりのじ「重複があったらおきかえるルーチン」を付け加えていたら書き込めなくなりました。書き込めたときはpushではなくunshiftを使っていました。

    • ベストアンサー
    • Perl
  • TwistOAuthが読み込めないエラー

    「TwistOAuth」でツイート語句検索ファイルを作っているのですが、初心者ゆえ、 エラーが出て上手くゆきません。”TwistOAuth.phar”はPHPファイルの同階層にそのまま置いています。 requireに失敗しているのでしょうか?以下のエラーが出ます。 ????nn? Fatal error: Class 'TwistOAuth' not found in /home/users/1/.../***.php on line 8 基本的な事がたぶん分かっていないのでご指摘お願いします。(????nn?の意味も分かりません。。) ~~~ソース~~~ <?php require ( dirname ( __FILE__ ) . '/TwistOAuth.phar'); $ck = '***'; $cs = '***'; $at = '***'; $as = '***'; try { $to = new TwistOAuth($ck, $cs, $at, $as); $q = '検索文字'; $count = 10; $lang = 'ja'; $result = $to->get('search/tweets', compact('q', 'count', 'lang')); } catch (TwistException $e) { $error = $e->getMessage(); exit( $error ); } ob_start(function($buf){ return mb_convert_encoding($buf, 'SJIS', 'UTF-8'); }); foreach($result->statuses as $status): echo $status->text; echo "\n"; endforeach; echo "end"; ?>

    • 締切済み
    • PHP
  • データを読み込んだ時・・・・

    すいません。初心者です。以下のようにデータを読み込んだとき、ifの条件部分 $form{'user'} eq $userid と、 $form{'kojimail'} eq $mail は、 ちゃんと判定してくれるのですが、 「$hantei eq $hanteiari」 は、判定しません. たぶん何かが違うんだと思いますが・・・・(>_<) 読み込んだデータ $hanteiari は、データベース内で、hanteiari と入力されています。何卒よろしく御願いします。 ★データベース情報 登録ID:名前:メールアドレス:性別:年齢:hanteiari:認証ID ★CGI #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); require 'jcode.pl'; &jcode'convert(*form, 'sjis'); open(ENQ, "<enquete.dat") || die "File 'enquete.dat' Open Error."; @dad= <ENQ>; $hanteiari= "hanteiari" foreach(@dad){ ($userid, $name, $mail, $sex, $age, $hantei, $kuuhaku )=split(/:/, $_); #ここです↓ if( $form{'user'} eq $userid && $form{'kojimail'} eq $mail && $hantei eq $hanteiari) {$ari =+10;} } if($ari< 5 ){ $atari =20;} close(ENQ);

    • ベストアンサー
    • CGI
  • データを書き換えたいのですが・・・

    以下の方法で、CGIを書いたのですが、ユーザーIDを入れても、データベースを書き換えられません。 どこが問題なのか、教えて頂きたく質問しました。 *何分初心者で、見づらいと思いますが、宜しく御願いします。 ★目的  ユーザIDを入れると、”hanteinasi”の人が”hanteiari”にデータベースに書き換えられる。 ★データベース ○ユーザID:名前:メール:性別:年齢:(判定ありorなし):認証ID: 例)kk432 : 佐藤 : j@co.jp : 男 : 20 : hanteinasi : q1234 : ★CGI #!/usr/local/bin/perl require 'cgi-lib.pl'; &ReadParse(*form); require 'jcode.pl'; &jcode'convert(*form, 'sjis'); open(ENQ,"+<enquete.dat") || die "File 'enquete.dat' Open Error."; @add= <ENQ>; $i=0; chop @add;; foreach (@add){ ($userID, $name, $mail, $sex, $age, $hantei, $ninsyouID )=split(/:/, $_); if( $form{'user'} eq $userID && $hantei eq "hanteinasi"){ $hantei= "hanteiari"; @add[$i]; = "$userID:$name:$mail:$sex:$age:$hantei:$ninsyouID:\n"; i++; flock(ENQ, 2); print ENQ @add[$i]; flock(ENQ, 8); } elsif($hantei eq "singuru" || $hantei eq "hanteinasi"){ @add[$i] = "$userID:$name:$mail:$sex:$age:$hantei:ninsyouID:\n"; i++; flock(ENQ, 2); print ENQ @add[$i]; flock(ENQ, 8);}} close(ENQ); # -----ここから出力 ----- print "Content-type:text/html\n\n"; print << "END_OF_HTML"; <HTML><HEAD><TITLE>登録完了</TITLE></HEAD> <BODY><CENTER><FONT color="red"> 登録完了 </FONT></CENTER></BODY></HTML> END_OF_HTML}EOF

    • ベストアンサー
    • CGI
  • CGI初心者です

    sub html でフォームに入力してもらい、 sub kekka で入力情報を確認し、 sub shori でテキストファイルに登録。 というプログラムを考えているのですが、 フォームから入力されたデータが入った変数$in{'name'} が、sub shori に移ると消えてしまいます。 いろいろ試行錯誤したのですが分かりませんでしたので 教えていただけたらと思います。 以下がサンプルのソースです。 #!/perl/bin/perl require './jcode.pl'; require './cgi-lib.pl'; &ReadParse; if($in{'action'} eq "set"){&kekka;} elsif($in{'action'} eq "sss"){&shori;} else{&html;} sub html{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト1</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="set">\n 名前<br><input type=text name="name" size="30" MAXLENGTH="30"><br>\n <input TYPE="submit" value="確認"><INPUT type="reset" value="リセット">\n </form>\n </body>\n </html>\n EOM } sub kekka{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト2</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n <INPUT type=hidden name=action value="sss">\n name = $in{'name'} <input TYPE="submit" value="登録">\n </form>\n </body>\n </html>\n EOM } sub shori{ print "Content-Type: text/html\n\n"; print <<EOM <html>\n <body>\n <h1>CGIテスト3</h1>\n <form ACTION="./sample.cgi" METHOD="POST">\n name = $in{'name'} </form>\n </body>\n </html>\n EOM }

    • ベストアンサー
    • Perl
  • perl  TermExtract 動かない

    perl で TermExtract というものを使って専門用語抽出をしたいと思っています。 参考ページ http://gensen.dl.itc.u-tokyo.ac.jp/termextract.h … 形態素解析ソフトは「和布蕪」を使っています。 参考ページの 「和布蕪」の場合の、TermExtract::MeCab サンプルスクリプトを参考にして 動かしてみたんですがうまく動作しません。 <ソース> #! /usr/bin/perl use TermExtract::MeCab; my $data = new TermExtract::MeCab; my $InputFile = "./CGI/mecab_out.txt"; $SIG{INT} = $SIG{QUIT} = $SIG{TERM} = 'sigexit'; my $output_mode = 1; my @noun_list = $data->get_imp_word($InputFile); print "Content-type: text/html; charset=EUC-JP\n\n"; print <<"EOM"; <!DOCTYPE html> <HTML> <HEAD> <TITLE>mecab</TITLE> </HEAD> <BODY> EOM foreach (@noun_list) { # 結果表示 printf "%-60s %16.2f\n", $_->[0], $_->[1] if $output_mode == 1; printf "%s\n", $_->[0] if $output_mode == 2; printf "%s,", $_->[0] if $output_mode == 3; } sub sigexit { $data->unlock_db; } print <<"EOM"; </BODY> </HTML> EOM <---------------> mecab_out.txtには、和布蕪」を使って出食された形態素解析済みのデータ が入っています。 ブラウザでみると、真っ白のページが表示されます。 なにか使い方を間違えているのでしょうか? よろしくお願いいたします。

  • 連続するecho関数の手間を省く方法

    現在、PHPとCGIを平行して勉強しているのですが、 CGIは printf EOM<< ~ EOM<< のような形で関数1つだけで~の内容を出力できるのに、同様にPHPでやるとエラーになります。 こんな感じです。。。 <?php print EOM<< Content-Type:text/html\n\n; <HTML> <HEAD> <META http-equiv="Content-Type" content="text/html; charset=Shift_JIS"> <META http-equiv="Content-Style-Type" content="text/css"> <TITLE>ハロー!PHP!!</TITLE> </HEAD> <BODY> ハロー!PHP!! </BODY> </HTML> EOM<< ?>

    • ベストアンサー
    • PHP
  • 新しい書き込みができない、編集は可能。

    たびたび失礼します。 編集機能のついた掲示板を作成中です。 編集機能はつけられたのですが、今度は新しい書き込みができなくなりました。 新しい書き込みをすると、新しいデータが保存されずデータが逆に保存されたり、消えたりします。 ソース↓ open(KEIJI, "keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all = <KEIJI>; # HTMLタグと衝突する記号などを変換 $num = $all[0] + 1 if( $num eq '' ); $title = &henkan($form{'title'}); $topic = $form{'topic'}; $message = $form{'message'}; foreach(@all){ $data = $_;     $count = 0; ( $fnum ) = ( split(/:/,$data) )[0]; if ( $fnum == $num ) { $data = "$num:$time:$title:$topic:$message\r\n"; &jcode'convert(*data, 'sjis'); $count++; } if( $count == 0 ){ unshift @all_data, $data; } else { push @all_data, $data; } } ################################################ $countで新しいデータか編集かを分岐させたつもりなのですが、ここの処理が上手くいっていないようです。 怪しいのは、 unshift、$dataにちゃんとデータが入っているか、というところが怪しいように感じました。 もしヒントがあれば教えてください。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 単純なお問い合わせフォーム

    お問い合わせのフォームを作り、確認、最後にメールを飛ばす仕組みを作っているのですが、メールにインプットされたデータが入ってこない状態で届きます。どうか助けてください。(息切れ) *下記参照 #フォームの情報を初めに格納する所 省略 #-------------------------------↓ if ( $ACT eq 'ckt' ){ &kakunin; } elsif ( $ACT eq 'ckt2' ) { open (KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # ファイルの内容を1行単位ですべて配列allに読み込む @all = <KEIJI>; # すべてのデータについて繰り返す foreach (@all){ # 1行の文字列をコロンを目印にして項目に分割する ($firstname) = split(/:/, $_); # 1件分のデータを表示するサブルーチン &sendmail; } close(KEIJI); #------------------------------------↑ sub kakunin{ $new_data = "$firstname\n"; &jcode'convert(*new_data, 'sjis'); open(KEIJI, "<keijiban.dat") || die "File 'keijiban.dat' Open Error."; # 過去のデータを全て配列に読み込む @all_data = <KEIJI>; close(KEIJI); # 配列の先頭に新規データを追加 unshift(@all_data, $new_data); open(KEIJI, ">keijiban.dat") || die "File 'keijiban.dat' Open Error."; #flock(KEIJI, 2); # (新規データ+過去データ)をファイルに上書き print KEIJI @all_data; #flock(KEIJI, 8); close(KEIJI); # 書きこみ完了メッセージ &write_ok; exit; } sub sendmail { #以下省略メール送信プログラム exit; }

    • 締切済み
    • CGI

専門家に質問してみよう