如何使用PHP提取HTML页面script标签内嵌的目标数组内容
实现方案
你已经通过DOM拿到了script标签的完整内容,接下来用正则匹配+内容转换即可完成提取,完整可运行代码如下:
<?php $content = file_get_contents("test.html"); $dom = new DOMDocument(); @$dom->loadHTML($content); $targetParamStr = ''; $targetArr = []; foreach($dom->getElementsByTagName('script') as $script) { $scriptContent = $script->nodeValue; // 精准匹配SHOP.Purchase.buy方法的入参括号内容 if (preg_match('/SHOP\.Purchase\.buy\((.*?)\)/', $scriptContent, $matches)) { $targetParamStr = $matches[1]; // 可选:将参数字符串转为PHP数组 // 把JS的单引号替换为JSON兼容的双引号,包裹成数组格式后解析 $jsonFormat = '[' . str_replace("'", '"', $targetParamStr) . ']'; $targetArr = json_decode($jsonFormat, true); break; } } // 输出测试 var_dump($targetParamStr); // 字符串形式的目标片段 var_dump($targetArr); // 解析完成的PHP数组 ?>
逻辑说明
- 正则用非贪婪匹配
.*?,保证只取SHOP.Purchase.buy后第一个闭合括号里的内容,不会误匹配后续代码 - 如果只需要你提到的字符串形式的目标片段,直接取
$targetParamStr即可,不需要走后续转数组的逻辑 - 如果你的实际场景中JS参数包含转义单引号
\',只需要调整str_replace的替换规则适配即可,当前示例代码可直接运行适配你给出的HTML内容
内容的提问来源于stack exchange,提问作者Zoey Malkov
相关产品推荐
相关产品推荐

