• ベストアンサー

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から、データを覗くと、書き込まれたデータはあるのですが……。 それとも改行をさせる方法が根本的に間違っているのでしょうか。 ご教授お願いいたします。

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

  • ベストアンサー
  • 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