2011-03-09 72 views
1

链接我发现了一个程序来创建一个HTML链接时,链接文本PHP的HTML创建文本

<?php 
function makelink($text) 
{ 
return preg_replace('/(http\:\/\/[a-zA-Z0-9_\-\.]*?) /i', '<a href="$1">$1</a> ', $text." "); 
} 

// works 
echo makelink ("hello how http://www.guruk.com "); 

// dont work 
echo makelink ("hello how http://www.guruk.com/test.php "); 

?>

,你看到的例子,它的工作原理找到被发现只有一个域,而不是当该链接中存在页面或子目录时。

你能提供一个解决方案,该功能还可以与页面和子目录一起工作吗?

THX 克里斯

+0

可能重复:// stackoverflow.com/questions/1959062/how-to-add-anchor-tag-to-a-url-from-text-input) – outis 2012-03-11 00:35:51

回答

3

字符?=&用于查询字符串的网址。请注意,我将/的分隔符更改为!,因为表达式中有很多斜杠。另请注意,如果您处于不区分大小写模式,则不需要A-Z

return preg_replace('!(http://[a-z0-9_./?=&-]+)!i', '<a href="$1">$1</a> ', $text." "); 
0

你的正则表达式应该包括正斜杠在它的字符类的URL的末尾:

/(http\:\/\/[a-zA-Z0-9_\-\.\/]*?) /i 

这应该做到这一点。

0

没有正则表达式:

<?php 
    // take a string and turn any valid URLs into HTML links 
    function makelink($input) { 
     $parse = explode(' ', $input); 
     foreach ($parse as $token) { 
      if (parse_url($token, PHP_URL_SCHEME)) { 
       echo '<a href="' . $token . '">' . $token . '</a>' . PHP_EOL; 
      } 
     } 
    } 

    // sample data 
    $data = array(
     'test one http://www.mysite.com/', 
     'http://www.mysite.com/page1.html test two http://www.mysite.com/page2.html', 
     'http://www.mysite.com/?go=page test three', 
     'https://www.mysite.com:8080/?go=page&test=four', 
     'http://www.mysite.com/?redir=http%3A%2F%2Fwww.mysite.com%2Ftest%2Ffive', 
     'ftp://test:[email protected]:21/pub/', 
     'gopher://mysite.com/test/seven' 
    ); 

    // test our sample data 
    foreach ($data as $text) { 
     makelink($text); 
    } 
?> 

输出:

<a href="http://www.mysite.com/">http://www.mysite.com/</a> 
<a href="http://www.mysite.com/page1.html">http://www.mysite.com/page1.html</a> 
<a href="http://www.mysite.com/page2.html">http://www.mysite.com/page2.html</a> 
<a href="http://www.mysite.com/?go=page">http://www.mysite.com/?go=page</a> 
<a href="https://www.mysite.com:8080/?go=page&test=four">https://www.mysite.com:8080/?go=page&test=four</a> 
<a href="http://www.mysite.com/?redir=http%3A%2F%2Fwww.mysite.com%2Ftest%2Ffive">http://www.mysite.com/?redir=http%3A%2F%2Fwww.mysite.com%2Ftest%2Ffive</a> 
<a href="ftp://test:[email protected]:21/pub/">ftp://test:[email protected]:21/pub/</a> 
<a href="gopher://mysite.com/test/seven">gopher://mysite.com/test/seven</a> 
[如何定位标记从文本输入添加到URL(HTTP的