- ベストアンサー
フォームの太字を置き換える
更新記録CGIみたいなものを改造しようとしています。 文章の一部に太字を入れたいと思っています。 入力・修正画面ではフォーム内で<B></B>と出れば良いですが、表示部分でそのまま出ると駄目ですよね。 そこで置き換えようと思ったのですが、うまく出来ません。 $com1 = ~ s/<B>/<B>/g; $com1 = ~ s/</B>/</B>/g; とすると、$com1の内容が表示されなくなります。(他の部分は正常に表示している) 両方をコメントアウトすると、「<B>」と表示されます。 こういう場合、どのようにしたら良いのでしょうか?
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
>(ソースで見ても表示されてない) なんか別の問題でしょうかね。 全体を把握しないで、とりあえず改造って事なら、 ファイルに保存するのはそのままにしといて、 表示する時に b タグのみ有効って事で、表示する前に $com1 =~ s{<(/?b)>}{<$1>}ig; てしてみたらどうでしょうかね。 >$in{'com1'} =~ s/</</g; >$in{'com1'} =~ s/>/>/g; いわゆるサニタイズってヤツ考えると、 これは、ちょっとマズイかもですね。
その他の回答 (3)
- g_p_
- ベストアンサー率53% (28/52)
何度もすみません。 = と ~ はくっつけて書きましょう。 コピペしちゃったんで、スペース入っちゃいましたすみません。 結構悩みました… $com1 =~ s/<B>/<B>/g; $com1 =~ s/</B>/</B>/g;
- g_p_
- ベストアンサー率53% (28/52)
うーん何ででしょね? とりあえず、こんな感じで動きましたけど。 #! perl use strict; use warnings; my $str = << 'END_OF_HTML'; <b>ほかほかカレー</b> <b> できたてカレー </b> END_OF_HTML $str =~ s|<b>|<b>|g; $str =~ s|</b>|</b>|g; print $str; __END__
- g_p_
- ベストアンサー率53% (28/52)
とりあえず、/ をエスケープしてみてはどうでしょう。 $com1 = ~ s/<\/B>/<\/B>/g;
補足
返答ありがとうございます。 エスケープしてみましたが、「4294967295」と表示されてしまいました。 $comの中にはそのような文字列は無く、???です。 ---現在の状況--- $com1 = ~ s/<B>/<B>/g; $com1 = ~ s/<\/B>/<\/B>/g; $com1画表示される場所に「4294967295」と表示 ログの$com1 : s/<B>ほかほかカレーs/</B>
補足
返答ありがとうございます。 あれから色々と考えて、逆転の発想をしてみました。 ログに書き込むときに<B>にしてしまえば良いじゃないかってことで、入力後の記事保存手前で、 $in{'com1'} =~ s/</</g; $in{'com1'} =~ s/>/>/g; と入れました。 そうすると、ばっちり表示画面で太字が適用になりました。 しかし、別の問題が… 今度は修正画面で<B>が表示されません。 (ソースで見ても表示されてない) 色々探してると、デコード処理のところに以下のものが… # タグ処理 $val =~ s/&/&/g; $val =~ s/"/"/g; $val =~ s/</</g; $val =~ s/>/>/g; # 改行処理 if ($key eq "com1" || $key eq "com2" ) { $val =~ s/\r\n/<br>/g; $val =~ s/\r/<br>/g; $val =~ s/\n/<br>/g; } else { $val =~ s/\r//g; $val =~ s/\n//g; } これがもしかして何か関係しているでしょうか?