[PHP-users 34433] htmlタグのエスケープ処理
TNishimura
nisimura @ gatewaytec.jp
2009年 3月 19日 (木) 14:56:57 JST
西村と申します。
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つのタグだけが、正規表現にマッチしません。
正規表現の間違えなのかと思うのですが、解決出来ません。
strip_tags()も検討しましたが、不要なタグを削除ではなく、表示させたいので、今回は利用出来ません。
良きアドバイス等頂けますでしょうか?
宜しくお願いします。
///////////// モジュール ////////////////
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');
// まず全てエスケープ
$TEXT = htmlspecialchars($TEXT, ENT_NOQUOTES);
$CNT = count($Allow);
for($i=0; $i<$CNT; $i++){
$word = $Allow[$i];
$Patern_1 = "(<)(".$word.")( *)([^(>)]*)(>)";
$Patern_2 = "<\\2\\3\\4>";
$Patern_3 = "(<)/(".$word.")( *)([^(>)]*)(>)";
$Patern_4 = "</\\2\\3\\4>";
$TEXT = eregi_replace($Patern_1, $Patern_2, $TEXT);
$TEXT = eregi_replace($Patern_3, $Patern_4, $TEXT);
}
return $TEXT;
}
/////////////////////////////////////////
/////////////// データ //////////////////
<p style="color:red;">赤字</p> <br>
<img src="image.jpg" /><br>
<font color="Green">Green</font><br>
<table border="1">
<tr><th colspan="2">タイトル</th></tr>
<tr><td>左</td><td>右</td></tr>
</table><br>
<a href="eregtest.html" target="_blank_">リンク</a><br>
<b>ボールド</b><br>
<big>ビッグ</big><br>
<center>センタリング</center><br>
<hr>
<h1>H1</h1>
<h2>H2</h2>
<h3>H3</h3>
<h4>H4</h4>
<strong>強調</strong><br>
<tt>TT表示中</tt><br>
<u>アンダーライン</u><br>
<ul>
<li>リスト
<li>リスト
<li>リスト
</ul>
/////////////////////////////////////////
PHP-users メーリングリストの案内