Site icon Noir Solutions

Codifica caratteri speciali UTF8 e sostituzione accentate str_replace

In questo articolo vi parliamo dei caratteri sporchi del PHP o caratteri speciali che vengono visualizzati a video in maniera indesiderata. Quello di questi caratteri è un problema che se maneggiate il PHP, almeno una volta sicuramente avrete a che fare, e la soluzione non è esattamente delle piu’ semplici, per colpa spesse volte anche del PHP , che nonostante sia un considerato considerato semplice quando si tratta di andare a che fare con funzioni con str_replace, htmlentities, decode, ect. etc. diventa anche abbastanza confusionario, vi diciamo che in questo articolo non ci dilungheremo nel trattare in maniera approfondita le stringhe , ma ci limiteremo a degli esempi che vi permettano di risolvere il problema, cominciamo con str_replace, funzione del PHP che è la contrazione della stringa string replace, ossia rimpiazza caratteri all’interno della stringa che gli avete passato la sua sintassi è la seguente la prendiamo direttamente da www.php.net che cosi’ andiamo sul sicuro.

mixed str_replace ( mixed $search , mixed $replace , mixed $subject [, int &$count ] )

dove ovviamente

$search è la stringa cercata

$replace quella che andremo a sostituire

Seguono funzioni opzionali che la momento non ci interessano. Quindi una prima soluzione al fine di risolvere il problema potrebbe essere quello di sostituire eventuali caratteri sporchi o caratteri speciali html con una funzione del genere

$result = str_replace("&","&",$result);
 $result = str_replace("<","",$result);
 $result = str_replace("’","?",$result);
 $result = str_replace("‘","?",$result);
 $result = str_replace(""","\"",$result);
 $result = str_replace("”","?",$result);
 $result = str_replace("“","?",$result);
 $result = str_replace("apos;","'",$result);
 $result = str_replace("á","?",$result);
 $result = str_replace("à","?",$result);
 $result = str_replace("ä","?",$result);
 $result = str_replace("â","?",$result);
 $result = str_replace("Á","?",$result);
 $result = str_replace("À","?",$result);
 $result = str_replace("Ä","?",$result);
 $result = str_replace("Â","?",$result);
 $result = str_replace("ç","?",$result);
 $result = str_replace("Ç","?",$result);
 $result = str_replace("é","?",$result);
 $result = str_replace("è","?",$result);
 $result = str_replace("ë","?",$result);
 $result = str_replace("ê","?",$result);
 $result = str_replace("É","?",$result);
 $result = str_replace("È","?",$result);
 $result = str_replace("Ë","?",$result);
 $result = str_replace("Ê","?",$result);
 $result = str_replace("ì","?",$result);
 $result = str_replace("ï","?",$result);
 $result = str_replace("î","?",$result);
 $result = str_replace("Ï","?",$result);
 $result = str_replace("Î","?",$result);
 $result = str_replace("ö","?",$result);
 $result = str_replace("ô","?",$result);
 $result = str_replace("ò","?",$result);
 $result = str_replace("Ö","?",$result);
 $result = str_replace("Ô","?",$result);
 $result = str_replace("ú","?",$result);
 $result = str_replace("ù","?",$result);
 $result = str_replace("ü","?",$result);
 $result = str_replace("û","?",$result);
 $result = str_replace("Ú","?",$result);
 $result = str_replace("Ù","?",$result);
 $result = str_replace("Ü","?",$result);
 $result = str_replace("Û","?",$result);
 $result = str_replace("ÿ","?",$result);
 $result = str_replace("ý","?",$result);
 $result = str_replace("ä", "?", $result);
 $result = str_replace("ö", "?", $result);
 $result = str_replace("ü", "?", $result);
 $result = str_replace("Ä", "?", $result);
 $result = str_replace("Ö", "?", $result);
 $result = str_replace("Ü", "?", $result);
 $result = str_replace("ß", "?", $result);
 $result = str_replace(" ", " ", $result);
 //$result = str_replace("<"."![CDATA[", "", $result); //$result = trim(str_replace("]]".">", "", $result));
 $result = str_replace ( '
', "\n", $result );
 $result = str_replace ( '?', "Euro", $result );
 $result = preg_replace( '#\[.*/?\]#siU', '', $result );
 $result = preg_replace( '#\[(email|url)=("??)(.+)\\2\]\\3\[/\\1\]#siU', '\3', $result );
oppure una sua versione ridotta potrebbe essere
$stringa = str_replace("à", "a", $stringa);
 $stringa = str_replace("è", "e", $stringa);
 $stringa = str_replace("à", "a", $stringa);
 $stringa = str_replace("ì", "i", $stringa);
 $stringa = str_replace("ù", "u", $stringa);
 $stringa = ereg_replace("[^A-Za-z0-9 ]", "", $stringa );

Noi ve li abbiamo messi un po’ tutti , poi a voi stabilire quelli che veramente vi servono o meno…diciamo che questo dovrebbe essere il modo meno elegante di lavorare, insomma classico esempio di forza bruta, che pero’ essendo un modo efficiente è anche funzionale….Altrimenti bisognerebbe ricorrere ai metodi piu’ tradizionali che sono la funzione utf8_encode la cui sintassi sempre da php.net è la seguente

string utf8_encode ( string $data )

Questa funzione codifica la stringa di dati di UTF-8 , e restituisce la versione codificata. UTF-8 è un meccanismo standard utilizzato da Unicode per la codifica dei caratteri estesi valori in un flusso di byte. UTF-8 è trasparente a semplici ASCII caratteri, è auto- sincronizzato (il che significa che è possibile che un programma per capire dove i caratteri Bytestream iniziare) e può essere utilizzato con le funzioni normali di confronto tra stringhe per l’ordinamento e così via. PHP codifica UTF-8 caratteri in un massimo di quattro byte, diciamo che abbiamo fatto una traduzione alla buna di quello che è dove ovviamente $data è la stringa che gli passate. Un possibile esempio potrebbe essere

$fine=utf8_encode($vis1);

Questa per la verità sarebbe proprio la funzione consigliata in questi casi, anche se onestamente a noi qualche problema in questi casi l’ha dato, ossia introduce qualche carattere errato in qua e la per risolvere tutti i problemi allora vi consigliamo l’utilizzo di htmlentities la cui definizione è la seguente.

string htmlentities ( string $string [, int $flags = ENT_COMPAT | ENT_HTML401 [, string $encoding = 'UTF-8' [, bool $double_encode = true ]]] )

E’ una funzione molto affine a htmlspecialchars che php.net definisce come

Alcuni caratteri hanno un significato speciale in HTML, e dovrebbe essere rappresentato da entità HTML, se si vuole mantenere il proprio significato. Questa funzione restituisce una stringa con queste conversioni fatte. Se avete bisogno di tutte le sottostringhe di input a cui sono associati entità con nome da tradurre, utilizzare htmlentities ()

in ogni caso tralasciando peculiarità varie ecco una sua possibile implementazione che a noi non ha mai dato problemi.

$fine1=htmlentities($vis1, ENT_NOQUOTES, 'UTF-8');
Exit mobile version