如何从 PHP 中带有 preg_match_all 的字符串中 return JavaScript?
How can I return JavaScript from a string with preg_match_all in PHP?
我想用 preg_match_all
.
读取字符串中的所有内容 JavaScript
$pattern = '~<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>~su';
$success = preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);
array(0 => '<script>alert("Hallo Welt 1");</script>');
结果现在也包含脚本标记。
我想排除这个标签。
我的示例 Online Regex 和示例代码。
Regex 是解析 XML/HTML 的错误工具。您应该改用 DOM 解析器。 XPath 表达式 是一种专门用于解析 DOM 结构的语言。
$html = <<<_EOS_
<script>alert("Hallo Welt 1");</script>
<div>Hallo Welt</div>
<script type ="text/javascript">alert("Hallo Welt 2");</script>
<div>Hallo Welt 2</div>
<script type ="text/javascript">
alert("Hallo Welt 2");
</script>
_EOS_;
$doc = new DOMDocument();
$doc->loadHTML("<!DOCTYPE html><html>$html</html>");
$xpath = new DOMXPath($doc);
$scripts = $xpath->query('//script/text()');
foreach ($scripts as $script)
var_dump($script->data);
我想用 preg_match_all
.
$pattern = '~<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>~su';
$success = preg_match_all($pattern, $str, $matches, PREG_SET_ORDER);
array(0 => '<script>alert("Hallo Welt 1");</script>');
结果现在也包含脚本标记。 我想排除这个标签。
我的示例 Online Regex 和示例代码。
Regex 是解析 XML/HTML 的错误工具。您应该改用 DOM 解析器。 XPath 表达式 是一种专门用于解析 DOM 结构的语言。
$html = <<<_EOS_
<script>alert("Hallo Welt 1");</script>
<div>Hallo Welt</div>
<script type ="text/javascript">alert("Hallo Welt 2");</script>
<div>Hallo Welt 2</div>
<script type ="text/javascript">
alert("Hallo Welt 2");
</script>
_EOS_;
$doc = new DOMDocument();
$doc->loadHTML("<!DOCTYPE html><html>$html</html>");
$xpath = new DOMXPath($doc);
$scripts = $xpath->query('//script/text()');
foreach ($scripts as $script)
var_dump($script->data);