• ベストアンサー

PerlのLocation:が文字として出力されてしまいます

Perl/CGI内でボタンを配置し、そのボタンを押すとサブルーチンにあるprint "Location: $戻り先\n\n";でジャンプするようにしたいのですが、 「Content-type: text/html」より後にLocationを使うとジャンプせずに画面に文字として「Location: $戻り先」と表示されてしまいます。 このような場合どうすればよいのでしょうか?

  • CGI
  • 回答数1
  • ありがとう数0

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

  • ベストアンサー
  • okmotokun
  • ベストアンサー率59% (92/155)
回答No.1

Location: ~ でジャンプ(リダイレクト)させたいのならHTTPヘッダフィールドで出力しなければいけません。 その前に他のヘッダを出力し空行があればそれ以降はHTTPボディーですから画面に表示されます。 通常のCGIスクリプトではリダイレクトの場合、Location: ~ 行と空行を出力するだけで、他のヘッダは要りません。

関連するQ&A

  • perlでLocation

    Locationでは#xxxというのは使えないのでしょうか? #!/usr/local/bin/perl print "Location:xxx.cgi#xxx/?userID=$name\n\n"; exit; という風に書いています。 xxx.cgiはローカルにあるcgiでそのcgiの中身は表示できます。 しかしxxx.cgiの中の <xxxx.cgiの中身> print <<"EOM"; <html> . . . <A NAME="xxx>image</A> . . . </HTML> EOM exit; xxxのところでなく一番最初が表示されてしまいます。 どうすればいいのでしょうか?

    • ベストアンサー
    • Perl
  • perlでHTML出力時の文字コード

    Perlスクリプト中でHTML出力しているのですが、print "Content-type: text/html\n\n";と記述するとEUCで正常に表示され、print "Content-type: text/html; charset=Shift_JIS\n\n";と明示的にSJISを指定すると空白ページが表示されてしまいます。このスクリプトの他の場所ではprint "Content-type: text/html; charset=Shift_JIS\n\n";で正常にSJISで表示されます。どうしてだかわかりません。どなたかご教授お願いします。

  • 文字化け

    下記のような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
  • Locationを使いたいのですが

    はじめて質問します。よろしくお願いします。 フォームからデータを受け取って、なんらかの処理をしてから、 locationで別のページへジャンプしたいのです。 下のソースで、ローカル(win95)では正常に動いたのですが、 サーバーに移すと送信後のtest.cgiがエラーになってしまいます。 text.txtへの書込みはちゃんと行われています。 原因がわからなくて困っています。 locationの使い方が間違っているのでしょうか? ↓↓ test.cgiソース ↓↓ ------------------------------------------------------------ #!/usr/bin/perl require 'jcode.pl'; &decode; if ($FORM{'cmd'} eq "regist") { &write; # ファイル書込み print "Location: index.html\n\n"; } else { print <<END; Content-type: text/html <HTML><HEAD><TITLE>タイトル</TITLE></HEAD> <FORM ACTION="test.cgi" METHOD="POST"> <INPUT TYPE=TEXT NAME="message" VALUE=""> <INPUT TYPE=SUBMIT NAME="submit" VALUE="送信"> <INPUT TYPE=HIDDEN NAME="cmd" VALUE="regist"> </FORM> </BODY></HTML> END } exit; # ファイル書込み sub write { open OUT, ">test.txt"; print OUT "$FORM{'message'}\n"; close OUT; }

    • ベストアンサー
    • Perl
  • perlがうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n"; print "まずい$in{'form2'}\n"; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。 perlの場所も正確です。

    • ベストアンサー
    • Perl
  • perl CGIでのhttpヘッダー出力 (Content-type:

    perl CGIでのhttpヘッダー出力 (Content-type: text/html\n\n) が不要な場合について perlでCGIを作成しています。 多くの場合は、httpのヘッダー出力(Content-type: text/html\n\)を行っています。 毎回ではないですが、HTTPヘッダーの出力が不要な場合が存在します。 (HTMLにContent-type: text/html\n\が出力され表示されます。) そこで、HTTPヘッダーの出力が不要の場合の判断方法を教えていただければと思います。 よろしくお願いいたします。

  • Perlからjavascript構文の出力について

    はじめまして。 現在javascriptを勉強中の者です。 PerlからHTML構文内にjavascript構文を追記し出力しようとしていますが、追記してPerlを実行させただけでInternal Server Errorとなってしまいます。 過去ログをいくつか見させて頂きましたが、自分のソースのどこが悪いのかさっぱりです;; やりたいことは、登録完了ポップアップを表示させるだけです。 表示条件等は別として、まずjavascript構文をソースに追記してポップアップを表示させたいです。 どうか良きアドバイスをお願い致します。 #!/usr/bin/perl require "cgi-lib.pl"; print "Content-type: text/html\n\n"; print qq! <HTML> <HEAD> <META Http-Equiv="Content-Type" Content="text/html;charset=EUC-JP"> <META name="robots" content="noindex,nofollow"> <TITLE>登録画面</TITLE> </HEAD> <BODY> <script type="text/javascript"> <!-- alert("登録完了"); // --> </script> <FORM ACTION="test.cgi" METHOD="post"> <FONT SIZE="4"><B>登録画面</B></FONT>  </BODY> </HTML> !;

    • ベストアンサー
    • Perl
  • Perlがサーバー上でうごきません

    htmlファイルには <html> <form action="form2.cgi" method="get"> 食品名1<input type="text"name="form1"> <br> 食品名2<input type="text"name="form2"> <input type="submit"value="送信"> </form> </html> cgiファイルには #! /usr/bin/perl require "cgi-lib.pl"; &ReadParse(); print "Content-type:text/html\n"; print "\n"; print "<html>\n"; print "<head>\n"; print "<title>フォーム</title>\n"; print "</head>\n"; print "<body>\n"; print "おいしい$in{'form1'}\n; print "まずい$in{'form2'}\n; print "</body>\n"; print "</html>\n"; exit; cgi-lib.plはサーバーにいれております。 どうしてうごかないのでしょうか。

    • ベストアンサー
    • Perl
  • TXTに出力すると文字化けが起こる

    Ajaxで送信したデータを元にCGI(Perl)でTXTファイルを書き換えると、 どうしても文字化けしてしまいます。 内容はこんな感じです。無駄な部分は省きました ************************* #!/usr/local/bin/perl print "Content-type: text/html; charset=Shift_JIS\n\n"; use CGI; $n = $q->param("name"); $data = "$nさん、こんにちは"; open(F,"> data.txt"); flock(F,2); print F $data; flock(F,8); close(F); end; ************************* $n(フォームのデータ)は文字化けしないのですが、 「さん、こんにちは」の部分が文字化けしてしまいます。 詳しい方、ご教授願います。

    • 締切済み
    • CGI
  • "Content-type:text/html;charset=shift_JIS\n\n" がテキスト表示されてしまう。

    CGIで print "Content-type:text/html;charset=shift_JIS\n\n"; を出力すると その文字列がそのままブラウザにテキスト表示され、その後ろの操作、 例えば、 print "Status: 301 Move Permanent\n"; print "Location: http://localhost/file/data-1.lzh\n\n"; も、単純に文字列として表示されてしまいます。 ところが、print "Content-type:text/html;charset=shift_JIS\n\n"; の行を削除すると、 もともとの目的の動作(上記の例ではファイルのダウンロード画面ポップアップ)になります。 このように、print "Content-type:text/html;charset=shift_JIS\n\n";を書かなくて済む (あるいは書かない方が良い場合)というのは、なぜでしょうか。 サーバによっては動作が変わるのでしょうか。 ※そのCGI内で、print "Content-type:text/html;charset=shift_JIS\n\n"; を2行書いてあるというようなことはありません。 よろしくお願いいたします。

    • ベストアンサー
    • CGI

専門家に質問してみよう