[PHP-users 34445] Re: htmlタグのエスケープ処理

Tkyhrn tkyhrn1008 @ gmail.com
2009年 3月 19日 (木) 20:33:13 JST


Tkyhrnです

久保さんと同様に、先に許可するタグをなんらかの形へ変換し
あとでタグを復元するような方法です。

タグの記述が正しく書けていると言う前提で、、、
正しくないタグの形へ変換し、再度戻すという形です。

<a href="">aaa</a>を<<a href="">>aaa<</a>>に変えて、
htmlspecialcharで変換された中から'&lt;&lt;'と'&gt;&gt;' を'<','>'へ戻します。
動作確認してませんがこんな感じです。

function escape_text($TEXT){

 // 許可タグ
 $Allow =
array('br','p','img','font','table','tr','th','td','a','b','big','center','h','hr','strong','tt','u','li','ul');


 foreach ($Allow as $tag){
 $Patern_1 = '<('. $tag .')(\s*[^>]*)>';
 $Patern_2 = '<<\1\2>>";
 $Patern_3 = '</('. $tag .')>";
 $Patern_4 = '<</\1>>";
 $TEXT = eregi_replace($Patern_1, $Patern_2, $TEXT);
 $TEXT = eregi_replace($Patern_3, $Patern_4, $TEXT);
 }

 $TEXT = htmlspecialchars($TEXT, ENT_NOQUOTES);
 $TEXT = str_replace("&lt;&lt;","<",$TEXT);
 $TEXT = str_replace("&gt;&gt;",">",$TEXT);

 return $TEXT;
}


2009/3/19 TNishimura <nisimura @ gatewaytec.jp>:
> 西村と申します。
>
> CentOS 5.2
> PHP 5.2.6
> Apache 1.3.24
> にて、POSTされた投稿データから許可したタグ以外をエスケープ処理しようとしております。
> そこで、下記モジュールを作成し下記データを通した所、
> <p style="color:red;">
> <img src="image.jpg" />
> <font color="Green">
> <a href="link.html" target="_blank_">
> 上記、4つのタグだけが、正規表現にマッチしません。
> 正規表現の間違えなのかと思うのですが、解決出来ません。


PHP-users メーリングリストの案内