• 締切
  • すぐに回答を!

phpの掲示板でタグ使用

  • 質問No.3365292
  • 閲覧数221
  • ありがとう数1
  • 回答数2

お礼率 22% (8/35)

現在掲示板を作っているのですが、fontタグを使用できるようにしたいです。
$_POST['MESSAGE']が本文で、
置き換え部分のソースは、

$_POST['MESSAGE'] = str_replace('"', """, $_POST['MESSAGE']);
$_POST['MESSAGE'] = str_replace("<", "&lt;", $_POST['MESSAGE']);
$_POST['MESSAGE'] = str_replace(">", "&gt;", $_POST['MESSAGE']);
$_POST['MESSAGE'] = str_replace(array("\r\n","\r","\n"), " <br> ", $_POST['MESSAGE']);

となっています。
これを改造してタグが使えるようになりませんか?

回答 (全2件)

  • 回答No.2

ベストアンサー率 63% (292/459)

一旦 全ての<>を&lt;&gt; に変換しておいて、この変換には htmlspecialchars() を使った方が4回もreplaceを実行するよりよいと思いますけど。
次に、正規表現で &lt;font size="7"&gt;を<font size="7">に戻すことになると思います。

$origin = htmlspecialchars($_POST['MESSAGE'] );
$pattern = array('/&lt;(font\\s+size=[\"\'][1-7][\"\'])\\s*&gt;/i', '/&lt;\/fontgt;/i');
$replace = array('<$1>', '</font>');
$result = preg_replace($pattern,$replace, $origin );

fontタグでもonclick などのJavascriptが動作したか忘れましたけど、タグの属性部分に危険なJavascriptを仕込まれないようにするには、有効なタグの書式として一定の縛りを入れるべきでしょう。
上記では、size属性のみで属性値は数値のみとなります。
でも、実行チェックはしてないので、正規表現に誤りがあったら済みません、適宜修正して下さい。
お礼コメント
kenken3paa

お礼率 22% (8/35)

正規表現を使うんですか。
このスクリプトでは動きませんでしたが、学習したいと思います。
ありがとうございました。
投稿日時:2007/09/24 17:46
  • 回答No.1

ベストアンサー率 37% (11/29)

質問ですが、fontタグを追加する文字列は固定なのですか?
たとえば、$_POST['MESSAGE'] の内容が「ABCDEFG」でタグを追加したい文字列が「D」の場合は
$_POST['MESSAGE'] = str_replace('D', "<font>D</font>", $_POST['MESSAGE']);
で出来ると思いますが
str_replace('D', "<font>D</font>", $_POST['MESSAGE']);
       ↑
      この部分(D)が固定でない場合は難しいと思います
補足コメント
kenken3paa

お礼率 22% (8/35)

$_POST['MESSAGE']は、投稿内容で、

投稿者が、

>ひらけんっておもしろいよな
そうそう。<font size=7>ほんと</font>おもしろいな

と投稿した場合に、最初の>は&gt;に変換して、fontタグの<と>は変換せずに出力したいわけです。
投稿日時:2007/09/23 16:16
関連するQ&A

その他の関連するQ&Aをキーワードで探す

ピックアップ

ページ先頭へ