• ベストアンサー

textareaで改行すると、修正時、書き込んだデータがなくなります。

CGIのカスタマイズに関する質問です。 ソードワールドRPGキャラクターシート管理CGIを使用しています。 初期の設定で<input type>と<textarea>の改行をする際は<br>を使うと言う形になっています。 その中で<textarea>の改行をエンターキーでしたいと思い、 sub htmlunquote{ my $text = shift; $$text =~ s/&lt;/</g; $$text =~ s/&gt;/>/g; の部分を sub htmlunquote{     my $text = shift; $$text1 =~ s/\r\n/<br>/g; $$text1 =~ s/\r/<br>/g; $$text1 =~ s/\n/<br>/g; と変換してみました。 すると、エンターキーで改行できるようになったのですが、修正や追記しようとすると、何故か前に書き込んだ文章が消えてしまっています。 なぜ、文章が消えてしまうのか、全く検討がつきません。FFFTPから、データを覗くと、書き込まれたデータはあるのですが……。 それとも改行をさせる方法が根本的に間違っているのでしょうか。 ご教授お願いいたします。

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

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

  • ベストアンサー
  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.3

ソースを見てみました。 キャラクタ更新フォームのデータを読むところで、 $_ =~ s/<(.*?)>([^<]+)<\/.*?>/$pc{"$1"} = $2;/egi while <IN>; と、しているためデータ内に<br>が入っているとその項目が読み込み出来ません 下記の様に変更してみてください sub htmlunquote{ my $text = shift; $$text =~ s/&lt;/</g; $$text =~ s/&gt;/>/g; $$text =~ s/\n/<br>/g; } sub htmlquote{ my $text = shift; $$text =~ s/&/&amp;/g; $$text =~ s/"/&quot;'/g; $$text =~ s/</&lt;/g; $$text =~ s/>/&gt;/g; } 表示時は<br>に変換、記録時は改行をそのまま残します。 キャラクタ更新フォームのデータを読む箇所は 改行が入っているとwhile <IN>が分割されてしまうため下記のように変更 open(IN, "$chardatadir${file}.cgi") or error('システムエラー',"キャラクターファイル($file)が開けません。"); $_=join("",<IN>); $_ =~ s/<(.*?)>([^<]+)<\/.*?>/$pc{"$1"} = $2;/egi; close(IN); これでOKになるはず

ao0321k
質問者

お礼

ありがとうございます! 教えて頂いたように修正しましたら、希望していた通りになりました。 丁寧に教えてくださって、感謝しております。 本当にありがとうございました。

その他の回答 (2)

  • pipipi523
  • ベストアンサー率40% (148/365)
回答No.2

ソードワールドRPGキャラクターシート管理CGI とは、 http://www.vector.co.jp/soft/unix/game/se149734.html これでしょうか? sub htmlunquoteと言う部分が見あたりませんが・・・ ひょっとすると、 <textarea>の初期値の設定方法が間違っているということはありませんか? <textarea>初期値</textarea>です

ao0321k
質問者

補足

言葉足らずで申し訳ありません。 そのCGIのVer.2.00が、CGI作成者さまのサイト http://www.new-f.com/ でDLできまして、そちらを使っております。 <textarea>初期値に関しては、DLした状態から変更していないので、恐らく、間違ってはいないと思います。

noname#39970
noname#39970
回答No.1

うーん。改行は変換しない方が良いんじゃない? で <span style="white-space:pre"></span> (かpreタグ)で表示しちゃう。  とか。

ao0321k
質問者

お礼

素早いお答えありがとうございます。 改行部分は変更しない方が良いようなのですね。 教えて頂いた方法でチャレンジしようと思います。

関連するQ&A

  • 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での改行を<br>に

    perlでcgiを作成しています。 <textarea>などで投稿されたテキストの改行文字を<br>に変換するために、 $value =~ s/\r\n/<br>/g; $value =~ s/\r/<br>/g; $value =~ s/\n/<br>/g; のように処理していました。が、<textarea>内で最後に何度もenterを押す人がいて、結果、 hoge<br>hoge<br><br><br><br><br><br><br> のようになってしまいます。 hoge<br>hoge のようにしたいのですが、パターンマッチをあまり勉強していないので、 よくわかりせん。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • 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 へ、改行させたいテキストデータを書き込むには?

    Perlのprint命令では、print '(1)aaaa <BR>(2)bbbb',"\n"; というように、改行させたい箇所に<BR>を挿入すれば改行させられるとおもいます。ところが、print "<textarea> xxx </textarea>" として、CGIで複数行入力領域を書いたときは、xxxのなかに挿入した<BR>はそのまま文字として表示されてしまいます。  改行させるにはどうしたらいいのでしょうか?  どなたか(ひきつづき^^;;)、御教示をいただければ幸いです。

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

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

    • ベストアンサー
    • CGI
  • 改行の変換がうまく出来ていない?

    perlの更新記録CGIを改造中です。 テキストエリアを数個設置しているのですが、うまく保存が出来ません。 新規情報を入力するときはちゃんと改行したいデータも保存されます。しかし、修正画面で、何もしないでそのまま保存し直したところ、変に改行が入ってしまいます。(情報の途中で改行が入るので、ゴミレコードが増えてしまう。) 修正画面からログに書き込む手前で<BR>の変換をしていますが、何が間違っているのでしょうか? $in{'kouc1'} =~ s/\r\n/<br>/g; $in{'kouc1'} =~ s/\r/<br>/g; $in{'kouc1'} =~ s/\n/<br>/g; $in{'kouc2'} =~ s/\r\n/<br>/g; $in{'kouc2'} =~ s/\r/<br>/g; $in{'kouc2'} =~ s/\n/<br>/g; $in{'kouc3'} =~ s/\r\n/<br>/g; $in{'kouc3'} =~ s/\r/<br>/g; $in{'kouc3'} =~ s/\n/<br>/g; 新規入力のほうもまったく同じ状態ですが、こちらは正常に保存されます。 足りない情報があればすぐに指摘をお願いします。

    • 締切済み
    • CGI
  • textareでの改行

    ホームページ上のtextareaで入力してもらった情報を取得するCGI(perl)スクリプトを書いています。流れとしては,フォーム上で入力した情報をCGIで取得→確認画面を表示→問題無ければメールフォームとして送信,となっています。 このスクリプト上で問題となっているのが,textareaでは自動的に改行処理(wrap=softと同じ?xhtmlで書いているので,wrap属性は指定していません。)するときに入力される改行コードと,入力者が意図的に入力する改行コードを判別出来ないということです。自動的に挿入される\n(0x0A)を削除しようとスクリプト上で, $text =~s/\r\n/\n/g; $text =~s/\r/\n/g; $text =~s/\n//g; と入れたところ,全ての改行コードが変換処理されてしまい,入力者が意図的に入れた改行コードまで処理されてしまいます。 スクリプト上,もしくはxhtmlと組み合わせて,自動的に挿入される改行コードだけを消去して,意図的に入力した改行コードだけを残す処理は出来ないものでしょうか? phpなどを使うと出来るようですが,ある程度perlのcgiで作成してしまったので,このままで出来ればと思っています。よろしくお願いします。

  • 表(<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
  • textarea内での改行の条件

    投稿フォームなどのtextarea内で、改行の条件を決めたいと思っています。 具体的には、「。、・)」や「.,-)」などが文章末尾にある場合に限り改行を許可するといった感じです。 上記の許可文字以外でEnterキーを押して改行しても、実際には改行されずに処理が行われる方法が希望です。 textarea内の値が$mesの場合、 $kai = " 。..、??!!-ー-"; $mes =~ s/[^$kai]<br>//g; 上記のように置換をすると、$kaiに設定されている文字などで改行を行っても無効となり、$kai<br>ではOKという感じなんですが、改行が無効となる部分の文字が化けてしまいます。 何か最良な手法がございましたらご教授頂けますと幸いです。 宜しくお願い致します。

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

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

専門家に質問してみよう