Home > PHP il turbo nel web > Rimuovere caratteri “sporchi” da una stringa in PHP

Rimuovere caratteri “sporchi” da una stringa in PHP

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

Share
Categorie:PHP il turbo nel web Tag:
  1. untizio
    3 August 2007 a 14:11 | #1

    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. 3 August 2007 a 14:28 | #2

    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. T3ch
    3 August 2007 a 15:48 | #3

    Ottimizzazione del codice…

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

  4. yemmi
    3 August 2007 a 16:36 | #4

    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. yemmi
    3 August 2007 a 16:38 | #5

    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. 3 August 2007 a 16:46 | #6

    @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. yemmi
    5 August 2007 a 17:11 | #7

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

  8. 6 August 2007 a 20:32 | #8

    @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. Putin
    9 August 2007 a 21:11 | #9

    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. 10 August 2007 a 20:44 | #10

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

  11. 10 June 2009 a 21:47 | #11

    Come posso fare in modo che la funzione seguente mi lasci il “-” nella variabile?

    $string = ereg_replace(”[^A-Za-z0-9 ]“, “”, $string );

    grazie

  1. Nessun trackback ancora...