使用preg_replace </script>删除<script>标记

时间:2015-01-31 19:54:45

标签: php regex

我通过字符串过滤(从文本文件中拉出),并使用preg_replace删除所有和标签。出于某种原因,它正在删除实际文本&#34;脚本&#34;,但保留&lt;&gt;和。我试过在/&lt;&lt; (尝试将其视为文字),但这只会产生错误。如何删除括号?输入为<script>Text</script> 这是代码:

$file = file_get_contents($directory . "original-" . $name);
$file = htmlentities($file);
$file = preg_replace('<script>', '', $file);
$file = preg_replace('<\script>', '', $file);

这是输出:

  <>TEXT</>

3 个答案:

答案 0 :(得分:3)

答案是

$html = preg_replace('#<script(.*?)>(.*?)</script>#is', '', $html);

但您可能想查看strip_tags函数

答案 1 :(得分:2)

您在preg_*函数中使用的模式必须在此之前和之后具有某种delimiter。 PHP允许许多不同的分隔符,因此它将尖括号视为正则表达式分隔符,而不是模式的一部分。我通常使用{}作为分隔符,许多其他人使用斜杠,哈希符号,方括号,括号。角括号也被允许作为分隔符,这就是你的模式失败的原因。

您可以通过在模式周围添加一些分隔符来解决此问题,例如:

$file = preg_replace('/<script>/', '', $file);

另外,请注意PHP正则表达式区分大小写,因此您的模式会被标记为<SCRIPT><Script>的文件阻止。模式之后的i modifier(在结束分隔符之后)使其不区分大小写(/<script>/i)。此外,有许多不同的方法可以编写仍由浏览器解释的HTML标记,例如:

<script type="text/javascript">...</script>
<script src="..." />

在旁注中,也许我在你的问题上读得太多了,我不应该,我再说一遍,not use regexps to parse HTML, and especially to sanitize it

答案 2 :(得分:0)

$ html = preg_replace(&#39;#(。*?)#是&#39;,&#39;&#39;,$ html);