php html создать ссылку из текста - PullRequest
1 голос
/ 10 марта 2011

Я обнаружил подпрограмму для создания 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 chris

Ответы [ 3 ]

4 голосов
/ 10 марта 2011

Символы ?=& предназначены для URL со строками запроса. Обратите внимание, что я изменил разделитель с / на !, потому что в вашем выражении много косых черт. Также обратите внимание, что вам не нужно A-Z, если вы находитесь в режиме без учета регистра.

return preg_replace('!(http://[a-z0-9_./?=&-]+)!i', '<a href="$1">$1</a> ', $text." ");
0 голосов
/ 10 марта 2011

Без 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>
0 голосов
/ 10 марта 2011

Ваше регулярное выражение должно включать косые черты в свой класс символов для конца URL:

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

Это должно сделать это.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...