プロが教える店舗&オフィスのセキュリティ対策術

掲示板のようなCGIを利用し、入力フォームから送信された情報が保存されるプログラムを利用しています。
そのcgiファイルに記述されたコードに以下の記述があります。

sub decode {
&ReadParse;
while (($key,$val) = each %in) {
if ($key !~ /upfile/ ) {
&Jcode'convert(*val, "utf8", "", "z");
if ( $key !~ /label_name/ ) {
$val =~ s/</&lt;/g;
$val =~ s/>/&gt;/g;
}
$val =~ s/\r\n/<br>/g; $val =~ s/\r|\n/<br>/g;
}
$in{"$key"} = "$val";
}
$_v = $in{"_v"}; $del_img = $in{"del_img"};
}

この記述によりテキストエリアで改行された際に「<br>」に変換されると思うのですが、これを<br>から<br />に変えるため、
$val =~ s/\r\n/<br>/g; $val =~ s/\r|\n/<br>/g;を
$val =~ s/\r\n/<br \/>/g; $val =~ s/\r|\n/<br \/>/g;と変えました。
これにより、保存される改行コードが<br>から<br />に変わったのですが、その情報を編集するため再度保存された情報の入力フォームを呼び出すと、
テキストエリアでは改行されず、改行場所に<br />と入力されてしまいます。
もとのコードではテキストエリア内の改行は<br>が表示されず、ちゃんと改行されていました。

そこで以下のように書き直してみたのですが、やはり状況は変わりません。
sub decode {
&ReadParse;
while (($key,$val) = each %in) {
if ($key !~ /upfile/ ) {
&Jcode'convert(*val, "utf8", "", "z");
if ( $key !~ /label_name/ ) {
$val =~ s/</&lt;/g;
$val =~ s/>/&gt;/g;
$val =~ s/ / /g;
}
$val =~ s/\r\n/<br \/>/g; $val =~ s/\r|\n/<br \/>/g;
}
$in{"$key"} = "$val";
}
$_v = $in{"_v"}; $del_img = $in{"del_img"};
}

改行コード<br>を<br />に変更し、保存された情報を呼び出してもテキストエリアで改行コード<br />は表示されることなく改行される記述方法を教えてください。

分かりにくい文章で申し訳ありませんがよろしくお願いします。

A 回答 (2件)

もともと、 <br>→改行 は動作していたのでしょうか?


提示された中に、上記変換している部分が無いようですが
    • good
    • 0
この回答へのお礼

回答していただきありがとうございます。
おっしゃる通り大きな勘違いをしておりました。
他の編集箇所と頭がごっちゃになってしまい見当違いのことをしておりました。
ご指摘いただきありがとうございました。

お礼日時:2013/10/19 05:38

sub decode() は、入力された文字列を保存するときに通るルーチンで、


保存された文字列を テキストエリアに埋め込むときには通らないのでは?

それに、sub decode()に、$val =~ s/ / /g; を入れても、なんの意味もないと思いますが・・・


編集時に<br>を\nに変換しているルーチンがどこかにあるはずなので、
そちらを修正する必要があります。
    • good
    • 0
この回答へのお礼

回答していただきありがとうございます。
全くおっしゃる通りです。大きな勘違いをしておりました。
他の編集箇所と頭がごっちゃになってしまい見当違いのことをしておりました。
ご指摘いただきありがとうございました。

お礼日時:2013/10/19 05:39

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