2010年11月8日月曜日
【PHP】HTMLパーサ関数
PHPメモ/HTMLの解析 - Walrus, Digit
色々なHTMLパーサ関数は有りますが、依存なしで、ただ解析するシンプルな関数です。
/* HTMLパーサの動作例 */
$html = "<p>Hello, World!</p>";
$result = parse_html($html);
print_r($result);
第1引数がHTMLソースで、第2引数が要素を分ける最大数。
返り値は、タグなら配列で、文字列はそのまま入ります。
/* 出力 */
Array
(
[0] =< Array
(
[string] => <p>
[tag] => p
[is_tag] => 1
[is_start] => 1
[is_end] =>
)
[1] => Hello, World!
[2] => Array
(
[string] => </p>
[tag] => p
[is_tag] => 1
[is_start] =>
[is_end] => 1
)
)
タグごとに処理とかは以下のような感じでしょうか。
/* HTMLパーサの動作例 */
$html = "<p><b>Hello, World!</b><br /><i>Hello, World!</i></p>";
$result = parse_html($html);
$allow_tag = array('b', 'br');
foreach ($result as $parse ) {
if (is_array($parse) !== true)
$str .= $parse;
else if( in_array($parse['tag'], $allow_tag) === true)
$str .= strtr($parse['string'], array("'" => "'", '"' => """)) ;
else
$str .= htmlspecialchars($parse['string'], ENT_QUOTES, 'UTF-8');
}
echo $str;
/* 出力 */ <p><b>Hello, World!</b><br /><i>Hello, World!</i></p>
「>br /<」の解析結果は次の様になります。
Array
(
[string] => >br /<
[tag] => br
[is_tag] => 1
[is_start] => 1
[is_end] => 1
)ラベル: PHP
登録 投稿 [Atom]
