- ベストアンサー
確認画面に空白がでます
CGI.pmを使ってデータの受け渡しをするアンケートを作りましたが、チェック等をつけた後、入力の確認画面を表示させその後に「送信」を押すと送信実行となるようにしています。 そこで質問ですが以下の記述だと print " テスト確認画面\n"; の後に長い空白が出て print " <table border=1 cellspacing=2>\n"; が始まるようになります。この空白を除く方法を教えてください。 #!/usr/local/bin/perl # 日本語コード require 'jcode.pl'; # 配列 use CGI; $q = new CGI; @q1 = $q->param('q1'); $q1_str = join ',',@q1; ***途中省略(データの格納や取り出しの記述が続きます)*** # 確認の画面 print "Content-type: text/html\n\n"; print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">\n\n"; print "<html>\n <head>\n"; print " <title>テスト</title>\n"; print " </head>\n <body>\n"; print " テスト確認画面\n"; print " <form method=post action=\"test2_okuru.cgi\">\n"; print " <table border=1 cellspacing=2>\n"; print " <tr>\n"; print " <td width=100><font size=2>質問1</font></td>\n"; print " <td width=300><font size=2>$q1_str</font> </td>\n"; print " </tr>\n"; print " <tr>\n"; ***途中省略(質問項目が15程続きます)*** print " </table>\n"; print " </center>\n"; print "<input type=\"submit\" value=\"送信\"><input type=\"button\" value=\"戻る\" onClick=\"history.back()\"><br><br>"; print " </form>\n"; print "</body></html>\n"; exit; }
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
HTML上の問題があります。 print "□□□<td width=300><font size=2>$q1_str</font> </td>\n"; ↑ テーブル内の余計な場所に全角スペースがまぎれていると、テーブルの前にその全角スペースが表示されて間が開いたようになります。 以下今回の質問と関係ありませんが。 perlでhtmlを出力する時、「"」を「\"」で現しているとソースが汚くるし、ミスも起こりやすいのでクォート風演算子を使うといいです。 print "<td width=\"300\">"; ↓ print qq|<td width="300">|; 詳しくは http://www.rfs.jp/sitebuilder/perl/02/02.html#%83G%83X%83P%81[%83v%82%BE%82%E7%82%AF%82%C9%82%C8%82%E9%82%CC%82%F0%94%F0%82%AF%82%E9 また、何行も続けてprintするときは「ヒアドキュメント」で書くのもいいでしょう。 print "abcd\n"; print "efgh\n"; print "hijk\n"; ↓ print <<EOF abcd efgh hijk EOF 詳しくは上記URLをちょっと下の方にスクロールさせて。
その他の回答 (1)
- flowermaze
- ベストアンサー率56% (159/282)
長い空白というのが具体的にどの程度かわからないので、確証はないのですが。 form要素は、たいていのブラウザで、上下にマージンを取って表示されますが、それが原因ということはありませんか? form要素の開始タグ内に、style="margin:0"を入れてみてください。 ところで、 print "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=shift_jis\">\n\n"; が print "<html>\n <head>\n"; より先に来ているのは間違っています。 meta要素はhead要素の中に入れるものです。
お礼
ご回答ありがとうございました。みなさんのお陰で無事にうまくいきました。それからmeta要素の置き場所のご指摘も大変参考になりました。
お礼
教えていただいた通りで上手くいきました。ありがとうございました。余計な空白があんな形で出るとは思ってもみませんでした。それから、確かに「ヒアドキュメント」で書いてみたほうが良いみたいですね。本当に間違えやすくて見ずらいので。「クォート風演算子」というやり方もあるんですね。またまた勉強になりました。