2009-11-25 11 views

risposta

15

È possibile utilizzare espressioni regolari per fare questo:

$html_links = preg_replace('"\b(https?://\S+)"', '<a href="$1">$1</a>', $text); 
+0

la risposta ha funzionato come un fascino, ma se voglio assegno anche la presenza di www come lo farei? – Sarah

+0

@Sarah a meno che tu non voglia indirizzare in modo specifico tutti gli URL contenenti solo www, questo dovrebbe catturarli. Se hai bisogno di controllare www, allora aggiungi semplicemente www \. così: '\ b (http: // www \. \ S +)' e questo dovrebbe catturare solo URL con www. – mason81

+0

Se il documento contiene caratteri non ascii (come lingue asiatiche), è possibile sostituire "\ S +" per: "[0-9a-zA-Z -._ ~: /? # \ [\] @! $ & '() * +,; =] + "se gli URL sono solo caratteri ascii (altrimenti non cambiarli) – lepe

2

scrivo questa funzione. Sostituisce tutti i collegamenti in una stringa. I link possono essere nei seguenti formati:

Il secondo argomento è l'obiettivo per il link (' _blank ',' _top '... può essere impostato su false). Speranza che aiuta ...

public static function makeLinks($str, $target='_blank') 
{ 
    if ($target) 
    { 
     $target = ' target="'.$target.'"'; 
    } 
    else 
    { 
     $target = ''; 
    } 
    // find and replace link 
    $str = preg_replace('@((https?://)?([-\w]+\.[-\w\.]+)+\w(:\d+)?(/([-\w/_\.]*(\?\S+)?)?)*)@', '<a href="$1" '.$target.'>$1</a>', $str); 
    // add "http://" if not set 
    $str = preg_replace('/<a\s[^>]*href\s*=\s*"((?!https?:\/\/)[^"]*)"[^>]*>/i', '<a href="http://$1" '.$target.'>', $str); 
    return $str; 
} 
+0

dopo poche ore di googling questa è stata la risposta perfetta nel mio caso. –

Problemi correlati