假设 $content 是 textarea 的内容
/*Convert the http/https to link */
$content = preg_replace('!((https://|http://)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="$1">$1</a> ', nl2br($_POST['helpcontent'])." ");
/*Convert the www. to link prepending http://*/
$content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$1">$1</a> ', $content." ");
这适用于链接,但意识到当图像在文本中时它会破坏标记......
我现在正在尝试这样:
$content = preg_replace('!\s((https?://|http://)+[a-z0-9_./?=&-]+)!i', ' <a href="$1">$1</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$1">$1</a> ', $content." ");
像图像一样受到尊重,但问题是带有 http:// 或 https:// 格式的 url 现在不会被转换..:
google.com -> 未转换(如预期)
www.google.com -> 转换良好
http://google.com -> 未转换(意外)
https://google.com -> 未转换(意外)
我错过了什么?
-编辑-
当前几乎可行的解决方案:
$content = preg_replace('!(\s|^)((https?://)+[a-z0-9_./?=&-]+)!i', ' <a href="$2" target="_blank">$2</a> ', nl2br($_POST['content'])." ");
$content = preg_replace('!(\s|^)((www\.)+[a-z0-9_./?=&-]+)!i', '<a target="_blank" href="http://$2" target="_blank">$2</a> ', $content." ");
这里的问题是,如果这是输入:
www.funcook.com http://www.funcook.com https://www.funcook.com funcook.com http://funcook.com https://funcook.com
我想要的所有 url(所有,除了 name.domain)都按预期转换,但这是输出
www.funcook.com http://www.funcook.com https://www.funcook.com ;funcook.com http://funcook.com https://funcook.com
注意 ; 已插入,知道为什么吗?