[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で変換された中から'<<'と'>>' を'<','>'へ戻します。
動作確認してませんがこんな感じです。
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("<<","<",$TEXT);
$TEXT = str_replace(">>",">",$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 メーリングリストの案内