Ciao a tutti, ho creato questa funzione che rende indirizzi email e link cliccabili, poi analizza il testo alla ricerca di parole errate (le parole "giuste" sono contenute in un db), che vengono sottolineate di rosso. Il problema e' che anche le parole all'interno dei link vengono sottolineate, rendendo di fatto il link inutilizzabile. Per capirci se in input inserisco 'foo@bar.it' mi restituisce '<u>foo</u>@bar.<u>it</u>'. Come posso fare per far riconoscere alla funzione i link in modo che non vengono considerati come parole errate? Grazie

Codice PHP:
$regexemail '/([a-z0-9_%+-][a-z0-9._%+-]*@([a-z0-9.-]+\.)+[a-z]{2,6}){1}/i';
$replace '<a href="mailto:$0">$0</a>';
$emailtext preg_replace($regexemail,$replace,$text);

$regexftphtml '/(ftps?|https?:\/\/)([\da-z-]+\.)+[a-z]{2,6}[\/\w .-]*\/?/i';
$replace "<a href=\"$0\" target=\"_blank\">$0</a>";
$text preg_replace($regexftphtml,$replace,$emailtext);

$conn mysqli_connect('127.0.0.1','root','','esame') or die("Connection failed: ".mysqli_error($conn));

$vocabolario = array();
$text nl2br($text); //aggiungo <br> al posto di \r\n
$text2 str_replace('\'',' ',strip_tags($text)); //elimino tags html e sostituisco gli apostrofi con uno spazio
$words array_unique(str_word_count($text21'1234567890')); //divido il testo in singole parole, elimino i doppioni e le metto nell'array
$list implode("','",$words); //creo lista delle parole da usare nella query

    
$query mysqli_query($conn,"SELECT vocabolo FROM vocabolario WHERE vocabolo IN ('$list')");
    while (
$voc mysqli_fetch_array($query,MYSQLI_ASSOC))
    {
    
$vocabolario[] = $voc['vocabolo'];
    }
    
mysqli_close($conn);
    
    foreach (
$words as $parola)
    {
        if (!
in_array(strtolower($parola),$vocabolario))
        {
        
$replacement"<u>$parola</u>";
        
$text preg_replace("/\b$parola\b/i"$replacement$text);
        }
    }

return 
str_replace('\' ','\'',$text);