• 締切済み

phpの掲示板でタグ使用

現在掲示板を作っているのですが、fontタグを使用できるようにしたいです。 $_POST['MESSAGE']が本文で、 置き換え部分のソースは、 $_POST['MESSAGE'] = str_replace('"', "&quot;", $_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']); となっています。 これを改造してタグが使えるようになりませんか?

みんなの回答

  • hrm_mmm
  • ベストアンサー率63% (292/459)
回答No.2

一旦 全ての<>を&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
質問者

お礼

正規表現を使うんですか。 このスクリプトでは動きませんでしたが、学習したいと思います。 ありがとうございました。

  • swqamy
  • ベストアンサー率37% (11/29)
回答No.1

質問ですが、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
質問者

補足

$_POST['MESSAGE']は、投稿内容で、 投稿者が、 >ひらけんっておもしろいよな そうそう。<font size=7>ほんと</font>おもしろいな と投稿した場合に、最初の>は&gt;に変換して、fontタグの<と>は変換せずに出力したいわけです。

関連するQ&A