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
Python per tutti
205% Python
Python para todos è un libro sulla programmazione in Python. Questo è un tutoriale su Python adatto a tutti i livelli e si può scaricare in pdf gratuitamente in spagnolo. Il tutoriale di Python…
Funzioni popolari per gestire le stringhe
96% 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…
Fondamentali di jQuery
85% JQuery
jQuery stà diventando rapidamente uno strumento che ogni sviluppatore web di interfacce dovrebbe conoscere. Lo scopo di questo libro è di fornire una panoramica della biblioteca, in modo che qu…
Guida allo Zend Framework
50% Zend
Zend Framework è un framework open source per PHP. Zend Framework separa la logica e le azioni usando il pattern MVC (Model View Controller). Cosa è lo Zend Framework? Framework per la costruzione di siti web più veloci e …
Correggere gli errori di ereg in PHP 5.3
37% 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…