我正在尝试从超文本标记语言中删除JavaScript。
我不能让正则表达式在PHP中工作;它给了我一个空数组。为什么?
<?php
$var = '
<script type="text/javascript">
function selectCode(a)
{
var e = a.parentNode.parentNode.getElementsByTagName(PRE)[0];
if (window.getSelection)
{
var s = window.getSelection();
if (s.setBaseAndExtent)
{
s.setBaseAndExtent(e, 0, e, e.innerText.length - 1);
}
else
{
var r = document.createRange();
r.selectNodeContents(e);
s.removeAllRanges();
s.addRange(r);
}
}
else if (document.getSelection)
{
var s = document.getSelection();
var r = document.createRange();
r.selectNodeContents(e);
s.removeAllRanges();
s.addRange(r);
}
else if (document.selection)
{
var r = document.body.createTextRange();
r.moveToElementText(e);
r.select();
}
}
</script>
';
function remove_javascript($java){
echo preg_replace('/<script\b[^>]*>(.*?)<\/script>/i', "", $java);
}
?>
发布于 2009-12-11 17:26:04
这应该可以做到:
echo preg_replace('/<script\b[^>]*>(.*?)<\/script>/is', "", $var);
/s是这样的点。也匹配换行符。
这只是一个警告,您不应该使用这种类型的regexp来清理网站的用户输入。有太多的方法可以绕过它。对于清理,使用类似于http://htmlpurifier.org/库的东西
发布于 2009-12-11 17:21:45
这可能会超出您的期望,但根据您的情况,您可能希望查看strip_tags
。
发布于 2009-12-12 05:44:23
我有个想法
while (true) {
if ($beginning = strpos($var,"<script")) {
$stringLength = (strpos($var,"</script>") + strlen("</script>")) - $beginning;
substr_replace($var, "", $beginning, $stringLength);
} else {
break
}
}
https://stackoverflow.com/questions/1886740
复制相似问题