/*************************************************** * ****************
* プロセスの説明:
* 必要なパラメータがフィルター関数に渡されるとき、最初に filter() 関数が実行されます
* preg_match_all() でフィルタリングする文字列に、フィルタリングするすべてのタグ $tag を渡します
* それを取り出し、preg_split() を通じて preg_match_all の一致する配列をループします
※関数は各タグを「左属性」=「右値」の形に分割し、キーを保持します
* 残りの属性配列をループし、preg_split() によって一致した対応するコンテンツを取り出して
を形成します
* 置換可能な値、そして最後に文字列内の対応するタグが str_replcae() によって置換されます
* 機能一覧:
* 関数フィルター(&$str,$tag,$keep_attribute)
* 関数 match($reg,&$str,$arr)
* 関数 show($str,$title=,$debug = True)
※使用例:
* //捜狐ニュースのホームページを入手
* $str = @file_get_content("http://news.sohu.com");
* //フィルター
* フィルター($str,a,href,target,alt);
* フィルター($str,p,align);
* show($str、フィルタリングされたコンテンツ);
************************************************* * ********************/
$start_time = array_sum(explode(" ",microtime()));
$str = <<< HTML
adasdfasdf
asdfasdfasdfasdf
asdfasdfasdf
asdfadsfasdf
asdfasdfadf
asdfasdf
//显示原字串
show($str,Html);
//过滤
フィルター($str,a,href,target,alt);
フィルター($str,font,color,alt);
//監視後の内容を表示します
show($str,Result);
$run_time = array_sum(explode(" ",microtime())) - $start_time;
echo(
/**
* パラメータ:
* $str: フィルタリングされる HTML 文字列
* $tag: フィルターされたタグのタイプ
* $keep_attribute:
* 保持される属性。このパラメータの形式は次のとおりです
*href
* href、ターゲット、alt
* 配列(href,target,alt)
*/
関数フィルター(&$str,$tag,$keep_attribute) {
//監視すべきプロパティのパラメータ転送方式
if(!is_array($keep_attribute)) {
//含まれていない传递数组进来時の判断パラメータが含まれるかどうか、号
//包含、号時、切分パラメータ串は数组
$keep_attribute =explode(,,$keep_attribute);
}その他{
//纯字串,构造数组
$keep_attribute = 配列($keep_attribute);
}
}
echo("·过滤[$tag]标签, プロパティ保持:".implode(,,$keep_attribute).
);
//すべて要处処理の标记を取得します
preg_match_all($pattern,$str,$out);
//循環环处理每个标记
foreach($out[1] as $key => $val) {
//取得a标记中有几个=
$cnt = カウント($cnt) -1;
//构造適合正则
$パターン = ;
for($i=1; $i
$パターン .= ( .*=.*);
}
// 正表式の形成を完了します,如/(.*/iの样式
// 保持プロパティの取得
$replacement = match($pattern,$out[0][$key],$keep_attribute);
$str = str_replace($out[0][$key],$replacement,$str);
}
/**
* 説明: ラベルを構築し、保持する属性を保持します
* パラメータ: $reg: パターンの式、preg_match
* $str: 文字列、HTML 文字列
* $arr: 配列、保持する属性
* リターン:
*
などの保持されたタグを返します
* e.com*/
関数 match($reg,&$str,$arr) {
preg_match($reg,$str,$out);
$keep_attribute = ;
foreach($arr as $k1=>$v1) {
//保持する定義済み属性の配列
foreach($out as $k2=>$v2) {
//マッチング後の配列 =
$attribute = トリム(substr($v2,0,strpos($v2,=)));
//= 前の
if($v1 == $attribute) {
//保持する属性は一致する値の = より前の部分と同じです
$keep_attribute .= $v2
;
//この一致部分の値を保存します
}
}
}
$keep_attribute を返します
}
/**
* 文字列の内容を表示します
関数 show($str,$title=,$debug = True) {
if($debug) {
if(is_array($str)) {
$str = print_r($str,True);
}
$txtRows = count(explode("
",$str))+1;
}
?>
http://www.bkjia.com/PHPjc/508421.html
www.bkjia.com
true