PHP 正規表現: HTML 内のすべての JavaScript コードと一致する方法

WBOY
リリース: 2023-06-22 18:36:01
オリジナル
1797 人が閲覧しました

Web 開発では、一部の機能を実装するために JavaScript がよく使用されます。 HTML ページでは、JavaScript コード スニペットは通常、<script> タグに埋め込まれますが、場合によっては、スクリプト スニペットが標準の <script> タグに配置されず、 onclickonload などの他の HTML 要素の属性。

HTML ページ内のすべての JavaScript コード スニペットを検索したい場合は、PHP の正規表現を使用して一致させることができます。

正規表現の基本

正規表現 (正規表現) は、文字列パターンを記述するために使用される文法規則です。 PHP では、/ シンボルを使用して正規表現をラップします (/pattern/ など)。ここで、pattern は一致するパターンを表します。

一般的に使用される正規表現メタ文字は次のとおりです:

  • .: 任意の 1 文字と一致します
  • *: ゼロと一致します前の文字の 1 つ以上のインスタンス
  • : 前の文字の 1 つ以上のインスタンスと一致
  • ?: の 1 つまたは 0 個のインスタンスの前に一致文字
  • |: 文字列内の項目の 1 つと一致するように選択します。
  • d: 数字
  • ## と一致します。 #w: 文字、数字、アンダースコアと一致します。
  • s: スペース、タブ、改行などの空白文字と一致します。
一致スクリプト タグ内の JavaScript コード

まず、

preg_match_all 関数を使用して、HTML ページ内のすべての <script> タグを照合します。

$html = file_get_contents('example.html'); // 获取 HTML 文件内容
$pattern = "/<script(.*?)>(.*?)</script>/is"; // 匹配 script 标记的正则表达式
preg_match_all($pattern, $html, $matches); // 执行匹配
ログイン後にコピー

上記のコードでは、

file_get_contents 関数を使用して HTML ファイルのコンテンツを取得し、正規表現 /(.*? )< ;/script>/is HTML ページ内のすべての <script> タグの内容と一致し、一致した結果を $matches 配列に保存します。

ただし、これは

<script> タグに含まれる JavaScript コードのみを取得し、他の属性のコードは取得しません。

属性内の JavaScript コードを照合する

まず、JavaScript コードを含む属性の名前を知る必要があります。たとえば、クリック イベントの JavaScript コードは

onclick 属性に存在し、他のイベントの JavaScript コードは onloadonsubmit に存在する可能性があります。 onchange およびその他の属性。

PHP の組み込み

get_meta_tags 関数を使用して、HTML ページのすべてのメタ タグを取得し、その属性を分析して、JavaScript コードを含む属性名を見つけることができます。

$html = file_get_contents('example.html'); // 获取 HTML 文件内容
$meta_tags = get_meta_tags('data://text/html;base64,' . base64_encode($html)); // 获取元标记信息
$pattern = "/on[a-z]+=['"](.*?)['"]/i"; // 匹配属性中的 JavaScript 代码的正则表达式
$matches = array(); // 存储匹配结果
foreach($meta_tags as $tag=>$value) { // 遍历元标记
    if(preg_match_all($pattern, $value, $submatches)) { // 匹配属性中的 JavaScript 代码
        $matches = array_merge($matches, $submatches[1]); // 合并匹配结果
    }
}
ログイン後にコピー

上 コードでは、

get_meta_tags 関数を使用して HTML ページのメタ タグを取得します。次に、正規表現 "/on[a-z] =['"](.*?)['"]/i" を使用して、on で始まるすべての属性名と一致させます。 JavaScript コードを含むプロパティ。最後に、preg_match_all 関数を使用して、一致した結果を $matches 配列に保存します。

すべての JavaScript コードをマージする

上記の 2 つの手順により、HTML ページ内のすべての JavaScript コードが正常に見つかりました。ここで、これらのコード スニペットを結合して、簡単に処理できる文字列にする必要があります。

$html = file_get_contents('example.html'); // 获取 HTML 文件内容
$script_pattern = "/<script(.*?)>(.*?)</script>/is";
$attr_pattern = "/on[a-z]+=['"](.*?)['"]/i";

preg_match_all($script_pattern, $html, $script_matches); // 匹配 script 标记中的代码
$attr_matches = array(); // 存储属性中的代码
$meta_tags = get_meta_tags('data://text/html;base64,' . base64_encode($html)); // 获取元标记
foreach($meta_tags as $tag=>$value) { // 遍历元标记
    if(preg_match_all($attr_pattern, $value, $submatches)) { // 匹配属性中的代码
        $attr_matches = array_merge($attr_matches, $submatches[1]);
    }
}

$all_script = implode("
", array_merge($script_matches[2], $attr_matches)); // 合并所有代码为一个字符串
ログイン後にコピー

上記のコードでは、

implode 関数を使用して、$script_matches[2]$attr_matches## のすべての JavaScript コード スニペットをマージします。 # into さらなる処理のために各コード断片を区切るために改行文字を使用した文字列。

以上がPHP 正規表現: HTML 内のすべての JavaScript コードと一致する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート