PHP-字符串失败导致URL上的Preg替换

PHP-字符串失败导致URL上的Preg替换,php,url,replace,hyperlink,Php,Url,Replace,Hyperlink,这是我的职责: 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 makeC

这是我的职责:

    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);

它认为链接是一个子目录。有什么想法吗?谢谢

这是相对链接问题。在函数makeClickableLinks$s中,您必须检查链接是否以http或https开头,如果没有附加http://的话。找到下面的例子

function makeClickableLinks($s) {
    $link = ( strpos($s, 'http://') === 0 || strpos($s, 'https://') === 0) ? '' : 'http://'.$s;
    return $link;
}

据我所知,您希望组织类似于替换用户记录中的引用的内容,以便它们引用您的站点。此regexp的托盘:

<?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);

您必须在链接前面加上http://或https://或其他任何内容,否则它将被视为相对链接并附加到当前查看的URL中。@user1093634我已更新了我的答案,您能尝试一下让我知道吗?您好,谢谢。你的脚本不起作用。它产生这样的链接:成为花花公子谢谢你这工作后,一点点调整。我使用的是:echo preg_替换/
function makeClickableLinks($s) {
    $link = ( strpos($s, 'http://') === 0 || strpos($s, 'https://') === 0) ? '' : 'http://'.$s;
    return $link;
}
<?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);