我正在尝试用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"e;
这给出了&gt;
<a href="http://any_link'">...
但我想:
<a href="http://any_link">
任何解决方案?
答案 0 :(得分:0)
看看:
(f|ht){1}tps
这仅适用于安全连接(httpS
,ftpS
)。它与http
或ftp
不匹配。