HTML文から指定タグ文を取り除き分離する

HTML文から特定のタグを抽出して分離するPHP関数を紹介します
但し、入れ子になったタグに関しては正しく処理出来ませんが、それなりに使い道はあるような気がします (^_^;)

目的としては、HTML文から script タグ文を抽出して分離させたいということです

当初はむか~しにすこしやった正規表現を使ってみようかと思ったのですが、すっかり忘れてしまい、特定のタグを抜き出すだけならそこまでは不要と思われたので、PHPの文字列処理 stripossubstr 関数を使用して実装してみました

作成した関数は2つです

HTML の指定タグ位置を取得
    //HTML の指定タグ位置を取得(大文字、小文字を区別しない)
    // $html 検索するHTML文
    // $stag スタートタグ 例 <script
    // $etag エンドタグ   例 /script>
    // $ofset検索開始位置 0- (strlen()-1)
    // 戻り値 位置情報配列(start, end)  エラー時は FALSE
    public static function htmltagpos($html, $stag, $etag, $ofset=0)
    {
        $pos = FALSE;
        $start = stripos($html, $stag, $ofset);
        if($start !== FALSE){
            $end = stripos($html, $etag, $start);
            if($end !== FALSE){
                $end += (strlen($etag)-1);
                $pos = array($start, $end);
            }
        }
        return $pos;
    }
HTML の指定タグを取り除き分離します
    //HTML の指定タグを分割して取り出す
    // $html 検索するHTML文
    // $stag スタートタグ 例 <script
    // $etag エンドタグ   例 /script>
    // $ofset検索開始位置 0- (strlen()-1)
    // 戻り値 分割 HTML文配列 $newhtml(指定タグ以外の部分, 指定タグ1, 指定タグ2, --- 指定タグN)  
    public static function htmltagsplit($html, $stag, $etag, $ofset=0)
    {
        $newhtml[0] = '';
        if(strlen($html) > 0){
            $start = $ofset;
            $end = strlen($html) - $ofset - 1;
            if($start != 0)
                $newhtml[0] = substr($html, 0, $start);
            for($cnt=0; ($pos = CeltisLib::htmltagpos($html, $stag, $etag, $start)) !== FALSE; $cnt++){
                $newhtml[0] = $newhtml[0] . substr($html, $start, $pos[0] - $start);
                $len = $pos[1] - $pos[0] + 1;
                $newhtml[$cnt+1] = substr($html, $pos[0], $len);
                $start = $pos[1] + 1;
            }
            if($start < $end)
                $newhtml[0] = $newhtml[0] . substr($html, $start, $end - $start + 1);
        }
        return $newhtml;
    }
使用例

$newhtml = [スタティッククラス名]::htmltagsplit($html, ‘<script’, ‘/script>’);

HTML文と開始タグ、終了タグ、オフセット位置(省略時は0)を指定します

ここでは $html のHTML文から script タグを抽出してみます

結果は、指定タグを取り除き分離したHTML文の配列データが $newhtml にセットされます。配列の0番目が指定タグを取り除いたHTML文、以下順番に抽出したタグのHTML文が順番に配列にセットされています

(指定タグが存在しなければ、配列0に元のHTML文が入るだけです)

PHPのプログラムでは、文字列と配列の組み合わせるだけでも結構なパワーがあることが実感出来ます


まとめ記事紹介

go-to-top