ホームページ  >  記事  >  バックエンド開発  >  PHP でよく使用される関数: HTML 文字列のフィルタリング_PHP チュートリアル

PHP でよく使用される関数: HTML 文字列のフィルタリング_PHP チュートリアル

WBOY
WBOYオリジナル
2016-07-13 17:35:04669ブラウズ

/*************************************************** * ****************
* プロセスの説明:
* 必要なパラメータがフィルター関数に渡されるとき、最初に 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

サイト a

サイト b

サイト c

サイト d
サイト e

adasdfasdf


asdfasdfasdfasdf


asdfasdfasdf

asdfadsfasdf
asdfasdfadf
asdfasdf

HTML;


//显示原字串
show($str,Html);

/************************************************* ************************************************* ************************************************* *****************/

//过滤
フィルター($str,a,href,target,alt);

フィルター($str,p,align);

フィルター($str,font,color,alt);

//監視後の内容を表示します
show($str,Result);

// 脚本运行時間

$run_time = array_sum(explode(" ",microtime())) - $start_time;
echo(

スクリプト実行時間: .$run_time.
);



/**

* 説明: HTML 文字列をフィルターします

* パラメータ:

* $str: フィルタリングされる HTML 文字列

* $tag: フィルターされたタグのタイプ
* $keep_attribute:
* 保持される属性。このパラメータの形式は次のとおりです
*href
* href、ターゲット、alt
* 配列(href,target,alt)
*/
関数フィルター(&$str,$tag,$keep_attribute) {

//監視すべきプロパティのパラメータ転送方式
if(!is_array($keep_attribute)) {
//含まれていない传递数组进来時の判断パラメータが含まれるかどうか、号

if(strpos($keep_attribute,,)) {

//包含、号時、切分パラメータ串は数组
$keep_attribute =explode(,,$keep_attribute);
}その他{
//纯字串,构造数组
$keep_attribute = 配列($keep_attribute);
}
}

echo("·过滤[$tag]标签, プロパティ保持:".implode(,,$keep_attribute).
);

//すべて要处処理の标记を取得します

$pattern = "//i";

preg_match_all($pattern,$str,$out);

//循環环处理每个标记
foreach($out[1] as $key => $val) {
//取得a标记中有几个=

$cnt = preg_split(/ *=/i,$val);

$cnt = カウント($cnt) -1;

//构造適合正则
$パターン = ;
for($i=1; $i

$パターン .= ( .*=.*);
}
// 正表式の形成を完了します,如/(.*/iの样式

$pattern = "/(.*$tag>)/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
; //この一致部分の値を保存します
}
}

}

//戻り値を構築します。構造は次のとおりです: aadd $keep_attribute = $out[1].$keep_attribute.($out[count($out)-1]); //戻り値

$keep_attribute を返します

}




/**
* 文字列の内容を表示します

*/

関数 show($str,$title=,$debug = True) {

if($debug) {
if(is_array($str)) {
$str = print_r($str,True); }
$txtRows = count(explode(" ",$str))+1;

echo($title.:


); }


}

?>


http://www.bkjia.com/PHPjc/508421.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/508421.html技術記事 ?php /********************************************** ********************** * プロセスの説明: * 要件を満たすパラメーターがフィルター関数に渡されると、filter() 関数は最初に * 必要なパラメーターを挿入します文字列..
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。