删除javascript链接


Remove javascript links

我正在寻找一个正则表达式,将能够取代所有的链接,如<a href="javascript://potentiallybadstuff"> Link </a>与警告。我一直在演戏,但到目前为止还没有成功!我一直不擅长正则表达式,有人能给我指出正确的方向吗?到目前为止我有这个:

编辑:有人说不要使用Regex - HTML将是一个markdown解析器的输出,所有的HTML标签在markdown中被剥离。因此,我知道所有链接的输出都将按照上述格式进行格式化,因此regex在这种特殊情况下肯定是一个很好的工具。我不允许用户输入纯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>

右正则表达式应为:

$pattern = '/href="javascript:[^"]+"/';
$replacement = 'href="javascript:alert(''Javascript links have been blocked'')"';

使用strip_tags和htmlSpecialChars()来显示用户生成的内容。如果您想让用户使用特定的标签,请参考BBcode.

你应该测试引号和双引号,处理空格等…

    $html = preg_replace( '/href's*='s*"javascript:[^"]+"/i' , 'href="#"' , $html );
    $html = preg_replace( '/href's*='s*''javascript:[^i]+''/i' , 'href=''#''' , $html );

试试下面的代码。我想这会有帮助的。

<?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;
}
?>