我正在寻找能够用<a href="javascript://potentiallybadstuff"> Link </a>
替换所有链接的正则表达式警告。到目前为止,我一直在玩,但没有成功!我一直对正则表达式不好,有人能指出我正确的方向吗?到目前为止我有这个:
编辑:人们说不使用正则表达式 - HTML将是降价解析器的输出,其中所有HTML标记都在标记中被剥离。因此,我知道所有链接的输出将按照上述格式进行格式化,因此在这种特定情况下,正则表达式肯定是一个很好的工具。我不允许用户输入纯HTML。并且SO已经做了类似的事情,尝试创建一个javascript链接,它将被删除
<?php
//Javascript link filter test
if(isset($_POST['jsfilter'])){
$html = "<a href=\"". $_POST['jsfilter']."\"> JS Link </a>";
$pattern = "/ href\\s*?=\\s*?[\"']\\s*?(javascript)\\s*?(:).*?([\"']) /is";
$replacement = "\"javascript: alert('Javascript links have been blocked');\"";
$html = preg_replace($pattern, $replacement, $html);
echo $html;
}
?>
<form method="post">
<input type="text" name="jsfilter" />
<button type="submit">Submit</button>
</form>
答案 0 :(得分:3)
正确的正则表达式应该是:
$pattern = '/href="javascript:[^"]+"/';
$replacement = 'href="javascript:alert(\'Javascript links have been blocked\')"';
答案 1 :(得分:1)
使用strip_tags和htmlSpecialChars()显示用户生成的内容。如果您想让用户使用特定标签,请参阅BBcode。
答案 2 :(得分:0)
试试这段代码。我想,这会有所帮助。
<?php
//Javascript link filter test
if(isset($_POST['jsfilter'])){
$html = "<a href=\"". $_POST['jsfilter']."\"> JS Link </a>";
$pattern = '/a href="javascript:(.*?)"/i';
$replacement = 'a href="javascript: alert(\'Javascript links have been blocked\');"';
$html = preg_replace($pattern, $replacement, $html);
echo $html;
}
?>
答案 3 :(得分:0)
你应该测试引号和双引号,处理空格等......
$html = preg_replace( '/href\s*=\s*"javascript:[^"]+"/i' , 'href="#"' , $html );
$html = preg_replace( '/href\s*=\s*\'javascript:[^i]+\'/i' , 'href=\'#\'' , $html );