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

A 回答 (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になるはず
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/10 03:40

ソードワールドRPGキャラクターシート管理CGI


とは、
http://www.vector.co.jp/soft/unix/game/se149734. …
これでしょうか?
sub htmlunquoteと言う部分が見あたりませんが・・・

ひょっとすると、
<textarea>の初期値の設定方法が間違っているということはありませんか?
<textarea>初期値</textarea>です

この回答への補足

言葉足らずで申し訳ありません。
そのCGIのVer.2.00が、CGI作成者さまのサイト http://www.new-f.com/
でDLできまして、そちらを使っております。

<textarea>初期値に関しては、DLした状態から変更していないので、恐らく、間違ってはいないと思います。

補足日時:2007/05/09 21:34
    • good
    • 0

うーん。

改行は変換しない方が良いんじゃない?
で <span style="white-space:pre"></span> (かpreタグ)で表示しちゃう。  とか。
    • good
    • 0
この回答へのお礼

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

お礼日時:2007/05/09 21:34

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

今、見られている記事はコレ!

おしトピ編集部からのゆる~い質問を出題中

お題をもっとみる


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ