Ago 03 2007

Rimuovere caratteri “sporchi” da una stringa in PHP

Published by maxgrante at 12:31 under PHP il turbo nel web

Capita spesso di dover ripulire una stringa da caratteri diciamo “non standard” come lettere accentate, & commerciali, parentesi etc…

In php per farlo è sufficiente sfruttare la potentissima: ereg_replace() in combinazione con str_replace().

Di seguito ecco una funzione utile e la relativa spiegazione.

function cleanString($string)
{
$string = str_replace(”è”, “e”, $string);
$string = str_replace(”à “, “a”, $string);
$string = str_replace(”à”, “o”, $string);
$string = str_replace(”ì”, “i”, $string);
$string = str_replace(”ù”, “u”, $string);
$string = ereg_replace(”[^A-Za-z0-9 ]“, “”, $string );
return $string;
}

Alla funzione viene passata la stringa sorgente da ripulire, successivamente (per scelta) vengono sostituite le classiche lettere accentate con le corrispettive non accentate, giusto per non tagliare brutalmente pezzi di stringa.
A seguito di questo viene eseguita ereg_replace() con una semplice espressione regolare che consente di accettare solo i caratteri da A a Z (maiuscoli), a -> z (minuscoli), i numeri da 0 a 9 e gli spazi.
Infine la stringa viene ritornata ripulita.

Per utilizzare la suddetta funzione è sufficiente richiare un codice di questo tipo:

$stringa_sporca = “Ciao, il mio nome è Massimo & questo è il mio blog”;
echo cleanString($stringa_sporca);

La stringa si trasforma a video in:
“Ciao il mio nome e Massimo questo e il mio blog”

Naturalmente alla funzione si possono applicare diverse alternative di sostituzione caratteri “pre-pulizia” ed estenderla con argomenti in ingresso che definiscano differenti comportamenti a seconda del caso.

Se qualcuno volesse dilettarsi a farlo e volesse postarlo nei commenti con piacere aggiornerà il post riportando le sue modifiche.

Ciao. Maxgrante
info[AT]massimo-caselli[DOT]com

10 Responses to “Rimuovere caratteri “sporchi” da una stringa in PHP”

  1. untizioon 03 Ago 2007 at 14:11

    Spero tu stia scherzando!!!…il tuo articolo non ha assulutamente motivo di esistere! Senza contare che nella tua frase trasformata ci sono degli errori grammaticali…

  2. maxgranteon 03 Ago 2007 at 14:28

    Nella frase trasformata è naturale che vi siano errori grammaticali, era un semplice esempio atto a dimostrare la pulizia di tutto cià che non siano spazi e/o caratteri alfanumerici standard.

    Tipicamente queste cose si fanno per ripulire login o pwd o ragioni sociali per inserirle in sistemi che potrebbero incazzarsi di fronte a caratteri non standard.

    Unico errore, ora corretto, è che mancava nel passaggio dell’argomento a cleanString() la variabile corretta essendomi sfuggito un underscore.

  3. T3chon 03 Ago 2007 at 15:48

    Ottimizzazione del codice…

    $a = array(’à ’,'è’, ‘à©’,'ì’, ‘à’, ‘ù’);
    $b = array(’a',’e',’e',’i',’o',’u');
    $string = str_replace($a, $b,$string);

  4. yemmion 03 Ago 2007 at 16:36

    xke’ invece di sostituire la a accentata (à ) con la a senza accent (a) nn si sostituisce con il codice html à ? e cosi’ via per le altre lettere … ciao ;)

  5. yemmion 03 Ago 2007 at 16:38

    errata corridge, a quanto pare il campo dove scrivere i commenti fa confusione se si scrivono codici html :D

    il codice html che volevo scrivere e’ (e commerciale)agrave;

  6. maxgranteon 03 Ago 2007 at 16:46

    @Yemmi
    Hai ragione, normalmente basterebbe fare tipo htmlentities o specialchars, ma la funzione nasce per gestire sistemi che non vogliono nemmeno le entity HTML.

  7. yemmion 05 Ago 2007 at 17:11

    ok allora sostituire la “à ” con una “a’” cioe’ a con vigoletta dopo, xke una “a” senza niente e’ errore grammaticale grave :)

  8. maxgranteon 06 Ago 2007 at 20:32

    @yemmy
    Scusa ma l’esempio che ho fatto forse era poco calzante, il punto è che questo tipo di funzioni nascono e si utilizzano tipicamente per gestire solo caratteri puliti puliti.
    Esempio tipico spesso sono i gestionali di contabilità  generale.

    Ciao. Max

  9. Putinon 09 Ago 2007 at 21:11

    Una volta creai una funzione simile per traslitterare dei caratteri cirillici in caratteri latini.

    Ho usato pero la funzione strtr, che seppur essendo meno performante della str_replace(in ordine di qualche microsecondo), ha una sintassi piu’ carina.

    Quindi nel caso delle accentate italiane, si potrebbe fare una cosa del genere:

    $stringa_sporca = strtr($stringa_sporca, “à èéùòì”, “aeeuoi”);

    oppure:

    $caratteri = array(’à ‘=>’a',’è’=>’e',’é’=>’e',’ù’=>’u',’ò’=>’o',’ì’=>’i');
    $stringa_sporca = strtr($stringa_sporca, $caratteri);

    Ciao.

  10. Francescoon 10 Ago 2007 at 20:44

    ne ho fatta una simile anche io e a volte continuo ad utilizzarla…

Trackback URI | Comments RSS

Leave a Reply