这是我的功能:
function makeClickableLinks($s) {
return preg_replace('@(https?://([-\w\.]+[-\w])+(:\d+)?(/([\w/_\.#-]*(\?\S+)?[^\.\s])?)?)@', '<a href="$1" target="_blank">$1</a>', $s);
}
$description = $_POST['description'];
echo makeClickableLinks($description);
$ _ POST ['description']是一个表单textarea,稍后将插入到MySQL表中。
我想允许用户在此输入字段中创建链接。当我使用此功能时,用户输入的数据如下所示:
Whats up guys. Here's my website! Please check it out!!
<a href="google.com">hi</a>
现在是一个可点击的链接,但链接到:
http://(myurl).com/google.com
它认为链接是一个子目录。有任何想法吗?谢谢!
答案 0 :(得分:0)
这是相对链接问题。在你的函数makeClickableLinks($ s)中,如果没有附加http://,你可以检查链接是以http还是https开头。找到下面的例子。
function makeClickableLinks($s) {
$link = ( strpos($s, 'http://') === 0 || strpos($s, 'https://') === 0) ? '' : 'http://'.$s;
return $link;
}
答案 1 :(得分:0)
据我所知,您希望组织更换用户记录中的引用等内容,以便他们引用您的网站。托盘这个正则表达式:
<?php
$str = "Whats up guys. Here's my website! Please check it out!!
<a href='google.com'>hi</a> and something:)";
echo preg_replace("/(<a[^<]* href=['\"])(http:\/\/|https:\/\/)?([^\"]*?)(['\"][^<]*>)/is", "$1mysite.com/$3$4", $str);