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($text2, 1, '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);