データが多いとエラーになる:改行をbrタグに変換

このQ&Aのポイント
  • フォームから受け取ったデータに改行があれば<br />に変換。さらに<br />が2つ続いたら</p><p>に変換。
  • 入力するデータが少ない(100文字程度)時は、問題なく処理されますが、データが多い(200~300文字程度)とエラー(Premature end of script headers:hoge.cgi)になります。
  • PCのスペックの問題なのでしょうか。
回答を見る
  • ベストアンサー

データが多いとエラーになる:改行をbrタグに変換

フォームから受け取ったデータに改行があれば<br />に変換。 さらに<br />が2つ続いたら</p><p>に変換。 それを、テキストエリアに表示したいのですが、次のようなコードを書いたところ、 入力するデータが少ない(100文字程度)時は、問題なく処理されますが、データが多い(200~300文字程度)とエラー(Premature end of script headers:hoge.cgi)になります。 どこがいけないのか教えて下さい。 PCのスペックの問題なのでしょうか。 送り側(htmlのフォーム)の該当箇所 <textarea name="reviw" id="reviw" rows="8" cols="46"></textarea> CGIは 冒頭で 受け取ったデータの改行コードは、\nに変換し $in{$key} = $val; の形でセットしてあります。 print "Content-type: text/html\n\n"; (中略) print <<'CK13'; <tr> <td> <textarea name="tagoutput" cols="70" rows="10" onclick="this.focus();this.select()"> CK13 print '<p>'; &reviw_put; print <<'CKouttag6'; </p> </textarea> </td></tr> CKouttag6 (後略) がhtml出力部分で、 サブルーチンは sub reviw_put { $in{'reviw'} =~ s/\x0A/<br \/>/g; $in{'reviw'} =~ s/(<br \/>){2}/<\/p><p>/g; print "$in{'reviw'}"; } です。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
  • da-te
  • ベストアンサー率37% (3/8)
回答No.1

こんばんは。 恐らくデータのサイズが32768バイトを超えているのが原因かもしれません。 参考サイトを載せますね。 #OKWaveでも話題に出てたようです。 http://digit.que.ne.jp/work/wiki.cgi?Perl%E3%83%A1%E3%83%A2%2FFileHandle%E3%83%A2%E3%82%B8%E3%83%A5%E3%83%BC%E3%83%AB#i13 http://okwave.jp/qa1493606.html

candystore
質問者

お礼

回答ありがとうございます。 原因が全く分からなかったので、とても参考になりました。 データを分割して処理するようにしてみようと思います。 とても助かりました。ありがとうございます!

関連するQ&A

  • TEXTAREAの改行をデータへ反映

    よろしくお願いします。 フォーム上で入力した値をCSVに反映させるようなものを作っているのですが、TEXTAREAで改行した値がCSVデータ上で改行されなくて困っています。 <TABLE>  ・  ・  ・ <TR> <TD>コメント:</TD> <TD><TEXTAREA NAME="COMMENT" rows="2" cols="40"></TEXTAREA></TD> </TR> </TABLE> 入力した値: ---------- あああ※ いいい※ ううう        ※位置で改行 ---------- CSVデータ内: ~,あああいいいううう webサーバー・・・HP-UX web・・・IE 開発端末・・・windows2000(Tera Term 使用) 以上。よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • テキストエリア内でタグ<BR>を使わずにenterキーで改行したい

    myshop.cgiという、フリーのcgiを使いたくて、超初心者なりに色々 調べながらもなんとか思い通りに出来てきたんですが、一つだけ どうしても自分では解決できなくて、困ってます。 enterキーでは改行できず、<BR>でしか改行できないテキストエリア内に、 ある文章をコピペしたいんですが、コピペした後に、いちいち<BR>を 入れるのが面倒なんで、enterキーで改行できるようにしたいんです。 しかし、どこをどういじればいいのかさっぱりわからなくて・・・。 とりあえず悩んでる付近のコードを載せておきます。 超初心者です!よろしくお願いします! 解決したいテキストエリアは、「サイトの紹介文」を入力するとこです。 ------------------------------------------------------------- print <<"EOF"; </select>$nini</td> </tr> <tr> <td>カテゴリ3 <select name="ct3"> <option value="">選択しない</optin> EOF if ($use_sub) { foreach (0 .. $#cates) { @SUB = split(/\s+/, $subct[$_]); $i=0; foreach $j (@SUB) { print qq( <option value="$_\,$i">$cates[$_] &raquo; $j</option>\n); $i++; } } } if (!$print_url) { $nourl = qq(<span style="color:red;">現在非表\示に設定されています。</span> ); } print <<'EOF'; </select>$nini</td> </tr> <tr> <td>サイトタイトル <small>(タグ利用可\能\ / 同じECサイトのテキスト広告が効果的)</small><br> <input type="text" name="tl" size="68"></td> <tr> <tr> <td>バナーのHTMLコード <small>(アフィリエイト仲介サイトからコピー&amp;ペーストして下さい。)</small><br> <textarea name="code" cols="54" rows="8"></textarea></td> </tr> <tr> <td>サイトの紹介文 <small>(タグ利用可\能\ / 但し改行は反映されないので<span style="font-weight:bold;">&lt;br&gt;を使用</span>して下さい。)</small><br> <textarea name="msg" cols="54" rows="20"><BR><BR><BR><BR></textarea></td> </tr> <tr> <td>価格 <small>(タグも利用可\能\)</small><br> <input type="text" name="url" size="68"></td> <tr> <tr> <td>サイトに関係の深いキーワード <small>(任意。検索で使用、5個までで最大文字数は20文字。)<br> <input size="14" type="text" name="key1" maxlength="20"> <input size="14" type="text" name="key2" maxlength="20"> <input size="14" type="text" name="key3" maxlength="20"> <input size="14" type="text" name="key4" maxlength="20"> <input size="14" type="text" name="key5" maxlength="20"></td> </tr> <tr> <td>サイト紹介文の位置<br> <input type="radio" name="line" value="0" id="bot" checked><label for="bot">バナーの下</label> <input type="radio" name="line" value="1" id="sid"><label for="sid">バナーの横</label></td> </tr> <tr> <td>オススメマーク<br> <input type="radio" name="rec" value="0" id="ron" checked><label for="ron">付けない</label> <input type="radio" name="rec" value="1" id="rof"><label for="rof">付ける</label></td> </tr> <tr> <td>表\示状態 (非アクティブにチェックを入れると一覧には表\示されません。)<br> <input type="checkbox" name="no_act" value="1" id="nact"><label for="nact">非アクティブにする</label></td> </tr> <tr> <td align="center"><br> <input type="submit" value=" 登録する "><input type="reset" value="リセット"> </td> </tr> </table> </form> </div> </body> </html> EOF exit;

    • ベストアンサー
    • CGI
  • textarea内のタグを反映させたいのですが

    http://okweb.jp/kotaeru.php3?q=984300を参考に 改行を犠牲にして自動リンクを利用できるようにしたのですが、 HTMLの一部に編集内容を反映したいため FONTタグ等も利用したいんです。 何か良い方法はありませんでしょうか? よろしくお願いします。 <?PHP 文字制限のため省略ですが参考元と同様です。 ?> <html> <title>テキストファイルのデータ更新</title> </head> <body> <form method="post" action="edit.php"> data1の変更 - <textarea name ="data1" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data1']); ?></textarea><br> data2の変更 - <textarea name ="data2" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data2']); ?></textarea><br> data3の変更 - <textarea name ="data3" rows="5" cols="40"><?php echo preg_replace("/<br>/", "\n", $ini['data3']); ?></textarea><br> <input type="submit" value="送信"> </form> <table> <tr><td>data1</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data1']); ?></td></tr> <tr><td>data2</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data2']); ?></td></tr> <tr><td>data3</td><td><?PHP echo ereg_replace("[[:alpha:]]+://[^<>[:space:]]+[[:alnum:]/]", "<a href=\"\\0\">\\0</a>", $ini['data3']); ?></td></tr> </table> </body> </html>

    • 締切済み
    • PHP
  • TEXTAREAの改行がうまくいきません。

    自作で掲示版を作成している、初心者です。現在作成中の掲示版にTEXTAREAに入力し、LOG上では1行目<BR>2行目といった形で改行をBRに置き換えて保存していますが、その修正としてLOGからデータをとり改行状態で表示させたいのですが、 うまく改行されない状態です。下記にLOGより読み込み。タグを\rに置き換えて いますが、TEXTAREAに表示されなく、改行表示どころではありません。 いったいどうすればよいのでしょうか?ご教示をお願いします。 <CGI文> $wkaaa1 = $IXUSERINF{Enaiyo}; データを取得 $wkaaa =~ &notag1($wkaaa1);  変換(これがおかしい?) $mesbuff .= "<TR><TD nowrap ><TEXTAREA ROW=\"10\" COLS=\"48\" NAME=\"Enaiyo\" WRAP=\"soft\">$wkaaa </TEXTAREA></TD></TR>"; <sub> sub notag1 { local($_) = @_; s/&/&amp;/g; s/"/&quot;/g; s/</&lt;/g; s/>/&gt;/g; s/&lt;br&gt;/\n/gi (これで <BR>を\n(改行)にしてるつもり return $_; }

    • ベストアンサー
    • CGI
  • textareaに改行を表示させる

    今htmlとphpで下記のプログラムを書いています。 <?php print "<TEXTAREA cols=50 rows=3>"; print $tem2[0]; print "</TEXTAREA>"; ?> ちなに$tem2をprint_rで表示させると図1のようになります。 そして上記のプログラムを実行すると図2のようになり、改行が<br>や<br />となり改行してくれません。 textareaで$tem2[0]を図3のように改行をきちんとして表示させたいと考えております。 どのようにすればよろしいでしょうか? ご存じの方いらっしゃいましたら、できれば具体的に教えていただけないでしょうか? よろしくお願いします。

  • 表(<table>)の直前が、改行されてしまう。

    表(<table>)の直前が、改行されてしまう。 perlでコーディングしています。データベースはmdbファイルです。 <textarea>内を簡単なWebエディタに見立てて、 <textarea>内へhtmlタグなどで書き込んだデータを、 mdbのメモ型フィールに更新し、これをブラウザで表示させています。 このとき、表(<table>)を表示させるために、<textarea>内に<table><tr><td>タグを入力するのですが、mdbファイルに更新する際に、 <table> <tr> <td>   : のように、改行した状態で更新すると、書き込んだ改行分だけ、ブラウザに表示された表の直前が改行されてしまいます。 (mdbファイルに直接書き込んでも同現象となりました。) <table<tr><td>・・・ と改行せずに書き込むと、ブラウザに表示された表の直前は改行されませんでした。 なお、ブラウザに表示させる側のcgiファイルには、改行キー(¥nなど)を改行タグ(<br>)に変換させるために、   $textarea1 =~ s/\r\r/<br>/g;   $textarea1 =~ s/\r/<br>/g;   $textarea1 =~ s/\n/<br>/g; としているため、これと関係していると思われるのですが、 わたくしとしては、  ●<textarea>内で手入力した改行は、ブラウザ表示に反映させるが、  ●<tabel>・・・・</tabel>の部分は、改行して入力されていても、この改行だけは無視する、 と言った、都合のよいことをしたいのですが・・・、行き詰っております。 perlやcgiの問題ではないかも知れませんが、 どなたか、よいアドバイス、ご提案などございませんでしょうか。 ご教授いただければ、大変助かります。 よろしくお願いします。

    • ベストアンサー
    • CGI
  • 自動改行タグの挿入

    フリーの改造OKなCGIを改造していますが、上手く行きません。 <textarea name=com cols="70" rows="10" wrap="OFF"></textarea> 上記のタグで入力したテキストの末尾に、自動で改行タグを付けて $com に渡してデータ保存をしたいのですが、なかなか上手く行き ません。どの様な記述をすればよいでしょうか? ご指導宜しくお願い致します。

    • ベストアンサー
    • Perl
  • textareaの改行の仕方について

    文字変数noteには<br>を含むのですが、 下記のプログラムを実行すると<br>がそのままテキストエリアの中に 表示されます。<br>を\r\nや\nに変換しても、それらがそのまま表示されます。 note変数の<br>の箇所で改行してやるには、<br>をどの文字と置換すればいいのでしょうか? print %Q{<textarea rows="5" cols="100" name="title2">#{note}</textarea>}

  • CGIで改行タグを改行コードに変換ってできますか?

    CGIで改行タグを改行コードに変換ってできますか? $text =~ s/\r\n/<br>/g; $text =~ s/\r/<br>/g; $text =~ s/\n/<br>/g; で確認画面上で表示されるtextareaの文章は改行されるのですが、 届いたメールには<br>と表示されてしまって困ってます。 PHPでは変換できるみたいなのですが、perlでも出来るのでしょうか?

    • ベストアンサー
    • CGI
  • CGIを使用してtextareaデータをHTMLファイルに変換の改行。

    textareaに入れられたデータをCGIを使用して、HTMLファイルに変換しています。 その時に、改行が1行ずつ多く入ってしまうようなのです。 例えばtextareaに あああああ あああ いいい ううう と入っていた場合、できあがったHTMLファイルは あああああ あああ いいい ううう となってしまうのです。 できあがったHTMLファイルを見ても改行が多いわけではなさそうなのですが…。 $buffer =~ tr/+/ /; $buffer =~ s/\n/<BR>/g; $buffer =~ s/'/\'/g; $buffer =~ s/・//g; みたいな感じでなってますが。 おわかりの方よろしくお願いします。

    • ベストアンサー
    • CGI