2011-12-26 36 views
0

这是我的函数:PHP - 的Preg的网址替换字符串从失败

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 [“说明”]是一个表单文本区域将在后面插入一个MySQL表。

我想让用户在这个输入字段中创建链接。当我使用这个功能,用户输入的,看起来像这样的数据:

​​

现在是一个可点击的链接,但链接:

http://(myurl).com/google.com 

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

+0

您必须在http://(或https://,或其他任何地方)的链接前加上链接,否则它会被视为相对链接并附加到当前查看的URL。 – Yaniro 2011-12-26 07:02:04

回答

0

据我所知,您希望组织类似于替换用户记录中的引用,以便他们引用您的网站。 Tray this 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); 
+0

多德谢谢你这一点后调整一下。以下是我使用的内容:echo preg_replace(“/()/是”,“$ 1http:/// $ 3 $ 4”,$ str) – Norse 2011-12-26 21:20:59

0

这是相对链接问题。在您的函数makeClickableLinks($ s)中,您需要检查链接是以http还是以https开头,如果不以http://附加链接。找到下面的例子。

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

你能告诉我该怎么做? – Norse 2011-12-26 07:58:30

+0

@ user1093634我已经更新了我的答案,你可以试试让我知道吗? – 2011-12-26 08:06:30

+0

嗨,谢谢。你的脚本不起作用。它产生的链接,如:click成为http://点击 – Norse 2011-12-26 21:16:21