PHP - 从字符串故障中删除URLS上的Preg

时间:2011-12-26 06:54:43

标签: 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 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

它认为链接是一个子目录。有任何想法吗?谢谢!

2 个答案:

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