プロが教えるわが家の防犯対策術!

今CGIをカスタマイズしています。
書き込みフォームでタグを使いたいのですが、タグをそのまま書き込むとHTML出力時に、<や>に変換されて表示されてしまいます。
なのでその変換する処理を無くしたいと思っているのですが、その処理を無くすとどういう不具合があるのでしょうか?無くそうと思っているのは下記のような箇所です。
~ s/</&lt;/g;
~ s/>/&gt;/g;
(わざと全角で書いてます)
書き込みデータにはdatファイルを使っています。

A 回答 (6件)

念のため・・・


No.4は表示するときではなく、
>formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する
方法のつもりで書きました
※<>→&lt;&gt;変換処理の直後に入れる。

いちいち<font color="~">と記述するのは大変なので、
<色=red>赤文字</色>などと覚えやすいタグにするのも親切でいいかも

#<色=red>~</色>を<font color=red>~</font>に
=~ s/&lt;(色)(.*?)&gt;(.*?)&lt;\/\1&gt;/<font color$2>$3<\/font>/gi;
    • good
    • 0
この回答へのお礼

返事が遅れてすいません。
今確認してみたところ、ちゃんと動いておりました。
ありがとうございます。
最善の方法を教えていただき感謝しております。

お礼日時:2007/05/22 17:31

>私は<b>や<font color=色>だけを使いたいのですが、その場合はどうすればいいのでしょうか?



ANo.4さんの意見の様に「表示時に元に戻す」というのがスマートかな?と思います。
formからのデータ取得時にタグを解析して<b>や<font color="~">以外のタグは変換する(あるいは無視する)というのも手ですね。
    • good
    • 0
この回答へのお礼

最善のアドバイスありがとうございました。
おかげでいい方法が見つかりました。

お礼日時:2007/05/22 17:32

必要なタグだけ元に戻す処理を入れたらどうでしょう



#<b>~</b>
=~ s/&lt;(b)&gt;(.*?)&lt;\/\1&gt;/<$1>$2<\/$1>/gi;
#<font xxx>~</font>
=~ s/&lt;(font)(.*?)&gt;(.*?)&lt;\/\1&gt;/<$1$2>$3<\/$1>/gi;#

閉じられていないのにも対処。もっと上手いやり方があるかも
    • good
    • 0

どうしても、タグを有効にしたいのなら、&lt; や &gt; だけでチェックするのではなく、


<a>だけは許すけど、<div>,<form>,<iframe>など他のタグは許さない。。。
などとしないと、レイアウトが崩れたり事実上サイトを乗っ取られたりします。
    • good
    • 0
この回答へのお礼

私は<b>や<font color=色>だけを使いたいのですが、その場合はどうすればいいのでしょうか?

お礼日時:2007/05/09 14:31

掲示板か何かでしょうか?


その処理をなくせばお望みどおり、HTMLが有効になります。

ただし、書き込みの中のHTMLに間違った記述があれば、表示が崩れます。
たとえば、</html>と書き込んでしまえば、その後は表示されなくなってしまいますし、
大きいフォントを選んで、タグを閉じていなければ、その後の書き込みも
すべて大きいままになります。
また、悪戯もあるかもしれません。
場合によってはブラウザクラッシャーを仕込まれたり、
妙なスクリプトを貼られるかもしれません。
    • good
    • 0

例えば掲示板ならタグを使えるようにすると、単なる文字の修飾に留まらずjavascriptを埋め込めたりと、いたずらに使えてしまうので禁止/無効化してある場合がほとんどです。


また悪意がなくとも間違ったタグの記述や閉じ忘れによって表示がおかしくなることもあります。

また超有名CGIサイトのPerlスクリプトはデータの区切りに'<>'を使用していて、その方式が広まったために
スクリプトによって何らかの処置をしないとデータファイルがうまく読み書きできなくなる事もあります。
    • good
    • 0
この回答へのお礼

悪意のある処理もできてしまうのですか・・・
埋め込まれるとは例えばどのようなjavascriptなのでしょうか?

お礼日時:2007/05/09 14:26

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