2011-10-21 17 views
0

との段落にプレーンURL(アンカーなし)が含まれているとします。これらのURLをタグ内にラップするにはどうすればよいですか?例えばPHPで文字列内のリンクに単語を変換するにはどうすればよいですか?

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

ありがとう:

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

それでは、どのように私はのようにすることを作ることができます!

答えて

1
$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); 

のコードを参照してください、それを書いていないことを行うために使用機能です。正規表現にマッチしたテキストに割り当てられます。この場合、URL。

+0

こんにちはどうしたの?どのような値は$ 1と$ strです - ありがとう – aurel

+0

^^実用的な例を示すように編集しました –

+0

美しいです – aurel

0

これは私が、私はあなたが$ 1無視することができ、ソース

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; 

} 
+0

これは素晴らしいことです。 – aurel

関連する問題