php html从文本创建链接

时间:2011-03-09 22:00:04

标签: php html text

我找到了在文本中找到链接时创建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 ");

&GT;

正如您在示例中看到的那样,它只能在域中查找,而不是在该链接中存在页面或子目录时。

您是否可以为该功能提供解决方案以使用页面和子目录?

THX 克里斯

3 个答案:

答案 0 :(得分:4)

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

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

答案 1 :(得分:0)

你的正则表达式应该在其字符类的末尾包含正斜杠:

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

应该这样做。

答案 2 :(得分:0)

没有RegEx:

<?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:six@ftp.mysite.com: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:six@ftp.mysite.com:21/pub/">ftp://test:six@ftp.mysite.com:21/pub/</a>
<a href="gopher://mysite.com/test/seven">gopher://mysite.com/test/seven</a>