RegEx替换链接,避免使用html特殊字符

时间:2014-03-05 12:38:11

标签: php html regex hyperlink

我正在尝试用PHP替换url链接(从http:// ...开始)到字符串中的html超链接,我使用正则表达式,但问题是与html“& nbsp有冲突;”字符。

所以我使用它,它似乎适用于普通链接,但是如果我添加规则(^&[^;]+?;)以避免特殊字符,它就不起作用。

function shortlink($text) {
    return preg_replace_callback(
        '/(^|[^"])(((f|ht){1}tps?:\/\/)(^&[^;]+?;)[-a-zA-Z0-9@:;\[\]%_\+.~#!?&\/\/=]+)/i',
        'url_link',
        $text
    );
}

这是回调函数:

function url_link($match) {
    return $match[1].'<a href="'.$match[2].'" target="_blank">'.(strlen($match[2])>50 ? substr($match[2], 0, 24).'<i>'.substr($match[2], 24, 1).'</i><span class="shortl">'.substr($match[2], 25, -19).'</span>'.substr($match[2], -19) : $match[2]).'</a>';
}

但是这个:

function shortlink($text) {
    return preg_replace_callback(
        '/(^|[^"])(((f|ht){1}tps?:\/\/)[-a-zA-Z0-9@:;\[\]%_\+.~#!?&\/\/=]+)/i',
        'url_link',
        $text
    );
}

工作正常,但冲突仍然存在。

此示例说明了此问题。如果我有一个字符串

http://any_link&quote; 

这给出了&gt;

<a href="http://any_link'">...

但我想:

<a href="http://any_link">

任何解决方案?

1 个答案:

答案 0 :(得分:0)

看看:

(f|ht){1}tps

这仅适用于安全连接(httpSftpS)。它与httpftp不匹配。