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

KUBO Tetsuro kubo @ calico.co.jp
2009年 3月 19日 (木) 19:22:25 JST


久保です。

単なるアイディアです。
ちょっと順番を変えただけです。
もちろんfoo baaがタグ以外のところにあればアウトですが、foo baaを$TEXTに
入りそうもない文字列にしておけば、実用上問題はないかと。

完璧を求められると無理ですが

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');

 $CNT = count($Allow);

 for($i=0; $i<$CNT; $i++){
  $word = $Allow[$i];
  $Patern_1 = "(<)(".$word.")( *)([^(&gt;)]*)(>)";
  $Patern_2 = "foo\\2\\3\\4baa";
  $Patern_3 = "(<)/(".$word.")( *)([^(&gt;)]*)(>)";
  $Patern_4 = "foo/\\2\\3\\4baa";
  $TEXT = eregi_replace($Patern_1, $Patern_2, $TEXT);
  $TEXT = eregi_replace($Patern_3, $Patern_4, $TEXT);
 }

 $TEXT = htmlspecialchars($TEXT, ENT_NOQUOTES);
 $TEXT = str_replace("foo","<",$TEXT);
 $TEXT = str_replace("bar",">",$TEXT);

 return $TEXT;
}


========================================================================


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