我通过字符串过滤(从文本文件中拉出),并使用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</>
答案 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);