【问题标题】:PHP Remove neighboring close and open script tagsPHP 删除相邻的关闭和打开脚本标签
【发布时间】:2015-06-24 19:21:28
【问题描述】:

说我有

<script>alert("hello");</script><script>alert("world");</script>

我怎样才能删除&lt;/script&gt;&lt;script&gt; 记住,两者之间可能有也可能没有空格(&lt;/script&gt; &lt;script&gt;),如果任何一个脚本标签具有源属性(@ 987654324@) 设置。

这应该与尽可能多的脚本标签一起使用,因此如果连续三个遵循相同的要求,它将变成一个大脚本标签。

【问题讨论】:

  • 你试过了吗?
  • 我已经删除了带或不带空格的脚本标签,但我不确定从哪里开始,即使检查是否设置了src
  • 听起来你正在用正则表达式解析 HTML,Tony 很快就会来?
  • ^ 然后在你的问题中展示你的工作和努力
  • 您要剥离标签吗? :)

标签: php html regex replace


【解决方案1】:

@kainaw 的回答是正确的,但我这里有一个复杂的版本,您可以只允许一些标签,并返回它们之间存在的空间。

function remove_same_openclosed_tags($matches){
  $allowed_tags = ['em', 'u', 'span', 'strong', 'script'];
  if(in_array($matches[1], $allowed_tags) && $matches[1] == $matches[3] ) {
    return $matches[2];
  }
  return $matches[0];
}
$content = preg_replace_callback("/<\/([a-zA-Z]+?)>(\s*)<([a-zA-Z]+?)>/is", 'remove_same_openclosed_tags' , $content);

【讨论】:

    【解决方案2】:

    使用

     $pattern="/<script[^s>]*>\s*<\/script>/isU";
     $html=preg_replace($pattern,"",$html);
    

    pattern 查找没有 src 属性的脚本标记,基本上我们是在查找它是否在内部有 s 并删除由零个或多个空格分隔的脚本打开和关闭标记

    【讨论】:

      【解决方案3】:

      您声明可能有“a”空格。如果是这种情况,您有两种情况:&lt;/script&gt;&lt;script&gt;&lt;/script&gt; &lt;script&gt;。您可以轻松地将两者都替换为空格:

      $html = str_replace('</script><script>',' ',$html);
      $html = str_replace('</script> <script>',' ',$html);
      

      但是,如果有很多空格怎么办?制表符、换行符等......全部加起来就是空格。您可以 preg_replace (它不是用正则表达式解析 HTML - 它只是替换一个明确定义的字符串)。

      $html = preg_replace('~</script>\s*<script>~',' ',$html);
      

      注意:如果第二个

      【讨论】:

      • 正如我在 cmets 中指出的那样,我应该在我的问题中添加这个,但我已经做到了这一点,但我不知道该怎么做,只有两者都没有src 集。是的,我只搜索 a 空间。
      • 在那种情况下,我作弊。首先,我将 更改为
      • 作弊是一种很好的方式。但我作弊比你建议的要严重一些。由于带有src 集的脚本标签没有内容,而那些没有的,我想出了这段代码,正是这样做的。 $Render = str_replace('&gt;&lt;/script&gt;', '&gt;&lt;/NOTASCRIPT&gt;', $Render); $Render = preg_replace('~&lt;/script&gt;\s*&lt;script&gt;~', ' ', $Render); $Render = str_replace('&gt;&lt;/NOTASCRIPT&gt;', '&gt;&lt;/script&gt;', $Render);
      猜你喜欢
      • 2011-07-13
      • 1970-01-01
      • 2023-04-02
      • 2010-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多