这个正则表达式做了什么?

时间:2011-03-20 14:56:48

标签: php regex

我们每天都学习。我遇到了这个脚本,虽然我是regex的新手,但我想知道它是否是一个安全的脚本以及它实际上的用途。

从我假设它删除了文本中的可点击链接,但是想知道更多。

function new_regex($text = '')
{
    $text = preg_replace('#(script|about|applet|activex|chrome):#is', "\\1:", $text);
    $ret = ' ' . $text;
    $ret = preg_replace("#(^|[\n ])([\w]+?://[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"\\2\" target=\"_blank\">\\2</a>", $ret);

    $ret = preg_replace("#(^|[\n ])((www|ftp)\.[\w\#$%&~/.\-;:=,?@\[\]+]*)#is", "\\1<a href=\"http://\\2\" target=\"_blank\">\\2</a>", $ret);
    $ret = preg_replace("#(^|[\n ])([a-z0-9&\-_.]+?)@([\w\-]+\.([\w\-\.]+\.)*[\w]+)#i", "\\1<a href=\"mailto:\\2@\\3\">\\2@\\3</a>", $ret);
    $ret = substr($ret, 1);
    return $ret;
}

1 个答案:

答案 0 :(得分:1)

第一行的确令人惊讶。它查找活动脚本uri前缀,但用自己替换它们。这似乎是一种误导性的安全尝试。

以下三个preg_replace调用会替换http://个网址或仅www.*个域名和xyz@email个地址。但它不会删除它们,而是用可点击的HTML链接替换它们。