代码之家  ›  专栏  ›  技术社区  ›  Severin

如何从PHP中preg\u match\u all的字符串返回javascript?

  •  0
  • Severin  · 技术社区  · 7 年前

    我想用 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>');
    

    结果现在也包含script标记。 我想排除此标记。

    我的样本 Online Regex 带有示例代码。

    0 回复  |  直到 7 年前
        1
  •  1
  •   Pinke Helga    7 年前

    正则表达式 是用于解析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);