In un lavoro che sto’ facendo, un cliente mi fornisce i suoi aggiornamenti attraverso un file in formato csv estratto dall’applicazione Excel della Microsoft. Ora ottenere i dati che servono da questo file prodotto da M$ non è una passeggiata visto che il grande dell’informatica aggiunge dei caratteri per avere il controllo del suo prodotto; quindi qualunque operazione che s’intende fare con questi dati non si può non tenere conto di questa particolarità. Dopo alcune ricerche ho trovato soluzioni più o meno valide ma la più diretta in termini di pestazioni è questa descritta in seguito.

Soluzione
Odio gli strani caratteri stupidi che a volte sembrano emergere magicamente dal nulla nel testo. Alcuni li chiamano i caratteri strani, alcuni li chiamano i caratteri speciali, io li chiamo i caratteri non ASCII, ma in qualunque cosa tu li chiami sono scomodi. Spesso vengono con testo incollato da un sistema di gestione dei contenuti come Microsoft Word o Excel.
Oggi ho avuto un grande lavoro di estrazioni che era pieno di questi caratteri non validi e che avevo bisogno di ripulire. Invece di scorrerli uno a uno e procedere alla rimozione su ogni istanza ho scritto una semplice espressione regolare che prende la stringa di testo e li sostituisce tutti con il nulla.
[code lang=”php”] <?php

$output = "Pulire questa stringa dal carattere non ASCII välidó.";
$output = preg_replace(‘/[^(\x20-\x7F)]*/’,”, $output);
echo $output;

?>
[/code]

Funziona benissimo, l’unico problema è che in certi casi alcuni di questi caratteri possono rappresentare caratteri reali come l’apostrofo (‘) o le doppie virgolette (“) quindi bisogna stare attenti a questo aspetto prima di usare una procedura come questa. Sceglierei, prima della trasformazione, a cambiare preventivamente i caratteri di mia scelta con dei token per riconvertirli dopo la sostituzione. Un esempio facile potrebbe essere il seguente:
[code lang=”php”] <?php

$cerca = array("’", ‘"’);
$token = array(‘PIPP0’, ‘PLUT0’);
$output = "Pulire questa stringa dal carattere non ASCII välidó.";
$output = str_replace($cerca, $token, $output);
$output = preg_replace(‘/[^(\x20-\x7F)]*/’,”, $output);
$output = str_replace($token, $cerca, $output);
echo $output;

?>
[/code]

Spero sia utile a voi come è stato per me.