PHP – Funzione per trovare collegamenti nel text

Ho una function che converte stringhe come "www.example.com" e " http://example.com " nei collegamenti ipertestuali. Si occupa anche di sottodomini, ad esempio " http://sub.example.com ".

Ma fallisce con questo – http: // www .example.com "e produce quanto segue

<a href="http://<a href="http://www.chemica.ru">www.chemica.ru</a>">http://<a href="http://www.chemica.ru">www.chemica.ru</a></a> 

Per favore, qualcuno può aiutare? Il problema è che sia "http: //" che "www." sono insieme e hanno entrambi diversi modi di convertire.

 function makeLinks($text){ $text = eregi_replace('(((f|ht){1}tp://)[[email protected]:%_\+.~#?&//=]+)', '<a href="\\1">\\1</a>', $text); $text = eregi_replace('(www.[[email protected]:%_\+.~#?&//=]+)', '<a href="http://\\1">\\1</a>', $text); $text = eregi_replace('([_\.0-9a-z-][email protected]([0-9a-z][0-9a-z-]+\.)+[az]{2,3})', '<a href="mailto:\\1">\\1</a>', $text); return $text; } 

scrivi semplicemente nella pagina della tua vista (non hai bisogno di librerie o funzioni di supporto):

 $text = "Good Site is http://masalahkita.com"; $link = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>", $text); echo $link; 

Potresti voler leggere questo post sul blog di Jan Goyvaerts per alcune idee su come trovare gli URL nel text.

Per risolvere il tuo problema immediato, potresti aggiungere un aspetto negativo alla tua seconda espressione regolare: (?<!http://)(www.[[email protected]:%_\+.~#?&/=]+) assicura che www... verrà abbinato solo se non è preceduto da http:// .

Tuttavia, le funzioni ereg sono deprecate e non supportno il lookaround, quindi dovrai usare preg_replace() .

 $text = preg_replace('/(?<!http:\/\/)(www.[[email protected]:%_\+.~#?&\/=]+)/i', '<a href="http://\1">\1</a>', $text); 

dovrebbe funzionare.

Sia per 'http://' che per 'www.' insieme , puoi fare qualcosa del genere:

 $text = "http://www.example.com is a nice site"; $link = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</a>", $text); echo $link; 

Works for URLs inizia con http: //