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.
<?php

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

?>
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:
<?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;

?>
Spero sia utile a voi come è stato per me.
Similari
Correggere gli errori di ereg in PHP 5.3
17% Php
Se avete fatto l’aggiornamento a PHP 5.3, ci sono alte probabilità che ci saranno alcuni avvisi o messaggi di funzioni deprecate, in alcuni casi ferma totalmente lo script. Un esempio è la famiglia di funzioni ereg, che so…
JavaScript Snippets
12% JScript
Vorrei postare un paio di frammenti di codice che ho in giro qui da un po’. Forse gli intenditori sbadiglieranno, ma ci sono un sacco di persone che sono alla ricerca di queste minuzie. Mi sbarazzo di questi appunti che ho…
Funzioni popolari per gestire le stringhe
11% Php
PHP ha una vasta scelta di funzioni integrate per la gestione delle stringhe che permettono di manipolarle facilmente in quasi ogni modo possibile. Tuttavia, imparare tutte queste funzioni, ricordando quello che fanno e qu…
Escaping and Encoding Script
9% JScript
Questi script hanno lo scopo di spiegare come nascondere l’HTML e/o lo javascript da altre persone che visualizzano il codice sorgente della tua pagina. Non è infallibile, ma rende più difficile da leggere e capire il codi…
Problemi con il BOM dell’UTF8
9% Php
Diventa un rompicapo, se si ha il BOM UTF8 all’inizio del file PHP, XML o javascript. Questi files devono inviare la loro intestazione prima di ogni altra cosa. A causa della posizione del BOM, che sono i primi bytes del f…