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("'" => "&#039;", '"' => "&quot;")) ;
    else
        $str .= htmlspecialchars($parse['string'], ENT_QUOTES, 'UTF-8');
}
echo $str;
/* 出力 */
&lt;p&gt;<b>Hello, World!</b><br />&lt;i&gt;Hello, World!&lt;/i&gt;&lt;/p&gt;

>br /<」の解析結果は次の様になります。

Array
(
    [string] => >br /<
    [tag] => br
    [is_tag] => 1
    [is_start] => 1
    [is_end] => 1
)

ラベル:


コメント: コメントを投稿

登録 コメントの投稿 [Atom]



この投稿へのリンク:

リンクを作成



<< ホーム

This page is powered by Blogger. Isn't yours?

登録 投稿 [Atom]

Google