• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないの)

CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないの

このQ&Aのポイント
  • CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないのですか?HTML書出しをテストしていますが、プログラムソース内の-title=>''の記述位置を変えても<title></title>タグが<head>タグ直下にきます。また-title=>''をコメントアウトしても<title>Untitled Document</title>と書き出されます。
  • CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないのですか?HTML書出しをテストしていますが、プログラムソース内の-title=>''の記述位置を変えても<title></title>タグが<head>タグ直下にきます。また-title=>''をコメントアウトしても<title>Untitled Document</title>と書き出されます。
  • CGI.pmのヘッダー部分のHTMLタグの書き出し順序は制御できないのですか?HTML書出しをテストしていますが、プログラムソース内の-title=>''の記述位置を変えても<title></title>タグが<head>タグ直下にきます。また-title=>''をコメントアウトしても<title>Untitled Document</title>と書き出されます。

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

  • ベストアンサー
  • kumoz
  • ベストアンサー率64% (120/185)
回答No.3

私の回答は CGI.pm をカスタマイズするという方法ではなく、プログラム内で実行するコードの1例です。 $q->start_html(...) が返す戻り値は、<title> の後に <meta> がくる単なる文字列です。この文字列を 直接出力しているのではなく、プログラムの中でいったん変数に格納して、<title> と <meta> の順番を 入れ替えて出力しているだけです。 モジュールを使う場合は、ドキュメントを読んで仕様に合わせる必要があります。モジュールの仕様が 自分に合わない場合は、ヒアドキュメントなどを使って HTML をベタに書くのも1方法だと思います。 print <<HTML Content-type: text/html <html><head> <meta http_equiv='Content-Type' content="text/html; charset=UTF-8'> <title>new set title</title> ... </html> HTML

perlerz10
質問者

お礼

ありがとうございます。 教えていただいた「戻り値を編集加工する」方法でやってみようと思います。

その他の回答 (2)

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.2

スラッシュをエスケープするのを忘れていました。訂正します。 my $start_html = $q->start_html(...); $start_html =~ s/(<title>.*?<\/title>.*?)(<meta[^>]*UTF-8[^>]*>)/$2$1/si; # \ を追加 print $start_html;

perlerz10
質問者

お礼

ありがとうございます。 私の環境がいわゆるレンタルサーバなので上位のCGI.pmを直接カスタムすることができません。 となると自前libにおいたCGI.pmをカスタムしないといけないですね。 しかし、デフォルト状態でtitle表示を消すことができないとなると、CGI.pmの利用を再検討しないといけなくなります・・・。 CGI.pmは様々な状況変化に合わせた柔軟なHTML出力機能を持ったモジュールだと考えないほうがよいのでしょうか?

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.1

my(@result); ... push(@result, "<HTML><HEAD><TITLE>$title</TITLE>"); ... if ($meta && ref($meta) && (ref($meta) eq 'HASH')) { foreach (keys %$meta) {push(@result, qq(<META NAME="$_" CONTENT="$meta->{$_}">)); } } ... return join("\n", @result); 上は CGI.pm の start_html の処理の概略ですが、<title> の位置は固定になっていて変更する ことはできないようです。メソッドの戻り値を編集加工する必要があると思います。 改行のことを考慮していませんが次のような感じで...。 my $start_html = $q->start_html(...); $start_html =~ s/(<title>.*?</title>.*?)(<meta[^>]*UTF-8[^>]*>)/$2$1/si; print $start_html;

関連するQ&A