首頁  >  文章  >  後端開發  >  PHP 正規表示式:如何匹配 HTML 中的所有 JavaScript 程式碼

PHP 正規表示式:如何匹配 HTML 中的所有 JavaScript 程式碼

WBOY
WBOY原創
2023-06-22 18:31:061799瀏覽

在網頁開發中,常常會使用 JavaScript 來實作一些功能。而在HTML 頁面中,JavaScript 程式碼片段通常會嵌在3f1c4e4b6b16bbbd69b2ee476dc4f83a 標籤中,但有時腳本片段並沒有放在標準的3f1c4e4b6b16bbbd69b2ee476dc4f83a 標籤中,而是存在於其他HTML 元素的屬性中,如onclickonload 等。

如果我們想要找到 HTML 頁面中所有的 JavaScript 程式碼片段,我們可以使用 PHP 的正規表示式來匹配。

正規表示式基礎

正規表示式(regular expression)是用來描述字串模式的一種語法規則。在 PHP 中,使用 / 符號將正規表示式包裹起來,如 /pattern/,其中 pattern 表示所要匹配的模式。

常用的正規表示式元字元包括:

  • .:符合任何單一字元
  • ##*:符合前一個字元的零個或多個實例
  • :符合前一個字元的一個或多個實例
  • ?:匹配前一個字元的一個或零個實例
  • |:選擇符合字串中的其中一項
  • ##d
  • :符合數字
  • w
  • :匹配字母、數字、底線
  • s
  • :匹配空格符、製表符、換行符等空白字元
  • 符合script 標籤中的JavaScript 程式碼

首先,我們可以使用

preg_match_all

函數來符合HTML 頁面中所有的3f1c4e4b6b16bbbd69b2ee476dc4f83a 標籤: <pre class='brush:php;toolbar:false;'>$html = file_get_contents('example.html'); // 获取 HTML 文件内容 $pattern = &quot;/&lt;script(.*?)&gt;(.*?)&lt;/script&gt;/is&quot;; // 匹配 script 标记的正则表达式 preg_match_all($pattern, $html, $matches); // 执行匹配</pre>上述程式碼中,我們使用

file_get_contents

函數取得一個HTML 檔案的內容,然後使用正規表示式/f4fd8c3eec17f88bd2bc2649b35d067f(.*?)&lt ;/script>/is 符合HTML 頁面中所有3f1c4e4b6b16bbbd69b2ee476dc4f83a 標記的內容,並將符合的結果儲存在$matches 陣列中。 然而,這樣只是取得了包含在

3f1c4e4b6b16bbbd69b2ee476dc4f83a

標籤中的 JavaScript 程式碼,而不包括其它屬性中的程式碼。 符合屬性中的 JavaScript 程式碼

首先,我們需要知道包含 JavaScript 程式碼的屬性名稱。例如,點擊事件的JavaScript 程式碼可能存在於

onclick

屬性中,其他事件的JavaScript 程式碼可能存在於onloadonsubmitonchange 等屬性中。 我們可以使用PHP 內建的

get_meta_tags

函數來取得HTML 頁面的所有元標記,並分析其屬性,找出包含JavaScript 程式碼的屬性名稱:<pre class='brush:php;toolbar:false;'>$html = file_get_contents('example.html'); // 获取 HTML 文件内容 $meta_tags = get_meta_tags('data://text/html;base64,' . base64_encode($html)); // 获取元标记信息 $pattern = &quot;/on[a-z]+=['&quot;](.*?)['&quot;]/i&quot;; // 匹配属性中的 JavaScript 代码的正则表达式 $matches = array(); // 存储匹配结果 foreach($meta_tags as $tag=&gt;$value) { // 遍历元标记 if(preg_match_all($pattern, $value, $submatches)) { // 匹配属性中的 JavaScript 代码 $matches = array_merge($matches, $submatches[1]); // 合并匹配结果 } }</pre>上述在程式碼中,我們使用

get_meta_tags

函數來取得HTML 頁面的元標記。然後,我們使用正規表示式"/on[a-z] =['"](.*?)['"]/i" 來匹配所有屬性名稱以on 開頭的屬性,其中包含JavaScript 程式碼。最後,我們使用 preg_match_all 函數將符合的結果儲存在 $matches 陣列中。 合併所有 JavaScript 程式碼

透過上述兩個步驟,我們已經成功地找到了 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 程式碼片段合併為一個字串,使用換行符號分隔每個程式碼片段,方便進一步處理。

以上是PHP 正規表示式:如何匹配 HTML 中的所有 JavaScript 程式碼的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn