Как я могу преобразовать слова в ссылки внутри строки с помощью PHP? - PullRequest
0 голосов
/ 21 октября 2011

Если у меня есть абзац с содержит простые URL-адреса (без якорей). Как я могу обернуть эти URL в теги?

Например:

$string = "visit http://blabla.com to get something";

Так, как я мог сделать это как:

visit <a href="http://blabla.com">http://blabla.com</a> to get something

Спасибо!

Ответы [ 2 ]

1 голос
/ 21 октября 2011
$str = "so i found this sweet website, http://www.stackoverflow.com you should check it out";

$modified = preg_replace("@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@", "<a href='$1' target='_blank'>$1</a>", $str);

echo $modified;

Или в функции

function linkUrls($str) {
    return preg_replace("@(https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?)@", "<a href='$1' target='_blank'>$1</a>", $str);
}
$str = "blah blah http://www.stackoverflow.com jaejg";
echo linkUrls($str);

Вы можете игнорировать 1 доллар.Он присваивается тексту, который соответствует регулярному выражению.В этом случае URL.

0 голосов
/ 21 октября 2011

это функция, которую я использую для этого, я ее не написал, см. Код для источника

    function urls2linksComplex($text,$schemes = 'normal',$tlds = 'normal'){

    //"urls2links - Complex" function by mBread @ SwirlDrop / m-bread web labs ( http://m-bread.com/lab/php/urls2linksComplex )
    //This functon is free to distribute and modify, but please leave these comments intact.
    if($schemes=='normal'){
        $scheme = '(?:[Hh][Tt]|[Ff])[Tt][Pp][Ss]?';
    }elseif(is_array($schemes)){
        $scheme = '(?:'.implode('|',$schemes).')';
    }elseif(is_string($schemes)){
        $scheme = $schemes;
    }else{
        $scheme = '[a-zA-Z][a-zA-Z0-9\-+.]*';
    }
    ; //EoIF


    if($tlds=='normal'){
        $tldExclude = array(
            'doc','xls','txt','rtf','jpeg','jpg','gif','png','exe','html','htm','zip','gz','scr','rar','php','php3','inc','ico','bmp','asp','jsp','dat','lnk','cab','csv','xml','xsl','xsd','svg','psp','psd','pdf','bak','wav','mp3','m4v','midi','wmv','wma','js','css','ppt','pps','mdb');
    }elseif(is_array($tlds)){
        $tldExclude = $tlds;
    }elseif(is_string($tlds)){
        $tldExclude = array(
            $tlds);
    }else{
        $tldExclude = array();
    }
    ; //EoIF
    $userinfo = '(?:(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:]|%[0-9A-Fa-f]{2})*@)?';

    $decOctet = '(?:[0-9]|[0-9][0-9]|1[0-9][0-9]|2[0-4][0-9]|25[0-5])';
    $ipv4 = '(?:'.$decOctet.'\.){3}'.$decOctet;
    $regname = '(?:(?:[0-9A-Za-z][0-9A-Za-z\-]*[0-9A-Za-z]|[0-9A-Za-z])\.)+[a-zA-Z]{2,6}';
    $host = '('.$ipv4.'|'.$regname.')';
    $port = '(?::[0-9]*)?';
    $authority = '((?://)?'.$userinfo.$host.$port.')';

    $path = '(?:/(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:]|%[0-9A-Fa-f]{2})*?)*';

    $query = '(?:\?(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:/?]|%[0-9A-Fa-f]{2})*?)?';
    $fragment = '(?:#(?:[a-zA-Z0-9\-._~!$&\'()*+,;=:/?]|%[0-9A-Fa-f]{2})*?)?';
    $pattern = '\b(('.$scheme.'\:)?'.$authority.$path.$query.$fragment.')($|[^\w/][<\s]|[<\s]|[^\w/]$)';
    $replacement = '( !in_array( substr(\'$4\', strrpos(\'$4\', \'.\')+1), $tldExclude) )?\'<a href="\'.((\'$2\' == \'\')?((strpos(\'$3\', \'@\'))?\'mailto:$1\':\'http://$1\'):\'$1\').\'">$1</a>$5\':\'$0\'';

    //$pattern=strip_tags($pattern);


    $text = preg_replace('`'.$pattern.'`e',$replacement,$text);
    $text = preg_replace('`<a href="(.*)"><a href="(.*)">`','<a href="$1">',$text);
    $text = str_replace('</a></a>','</a>',$text);

    return $text;

}
...