2013-05-24 19 views
9

Cercando attraverso Internet e questo sito web, ho trovato diversi argomenti in merito. Il fatto è che ci sono infinite soluzioni se le stringhe inserite devono contenere solo caratteri dell'alfabeto latino, ma quando il caso richiede il testo di altri alfabeti diventa un po 'complicato.PHP rimuovi i simboli dalla stringa

C'è un modo per rimuovere in PHP tutti i simboli da una stringa, ma lasciare le lettere effettive di tutti gli alfabeti UTF-8? Ho provato già a creare una matrice di tutti i caratteri della mia tastiera e poi usando str_replace o preg_replace rimuoverli, ma poi ho scoperto che diversi paesi hanno anche tastiere diverse a volte che includono simboli diversi. Ad esempio, la mia tastiera qwerty non ha il simbolo £, che potrebbe avere una tastiera britannica.

So che questa è una domanda strana, mi chiedo solo se esiste una soluzione facile che forse mi è sfuggita.

Qualsiasi aiuto sarebbe molto apprezzato!

EDIT: OK Dopo un po 'meglio ed esteso Google-ing ho scoperto che la seguente espressione regolare funziona bene per quello che mi serve e mantiene tutte le lettere di tutti i tipi di alfabeti mentre rimuove tutti i simboli. Lo sto condividendo qui nel caso in cui qualcun altro avrebbe bisogno di fare lo stesso.

$string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

risposta

28

La soluzione è questa: $string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

+1

Mi piace il fatto che sia compatibile con UTF-8. – HoldOffHunger

1

Prova questo:

<?php 

$string = "Remove these characters: £äó"; 
$string = preg_replace('/[^(\x20-\x7F)]*/','', $string); 
echo $string; 
?> 
+0

Il fatto è che i personaggi 'äó' non deve essere rimosso dal momento che sono utilizzati in parole e non sono simboli. Al contrario, '' 'dovrebbe essere rimosso. –

+0

Oh! Ho pensato proprio di fronte. La domanda stava per rimuovere i simboli dalla stringa :) –

6
$string = str_replace(' ', '-', $string); // Replaces all spaces with hyphens. 

preg_replace('/[^A-Za-z0-9\-]/', '', $string); // Removes special chars. 

echo $string; // output will be abcdef-g for 'a|"[email protected]£de^&$f g' 
+1

Vero. Ma quello di cui ho bisogno è qualcosa che permetta tutti gli alfabeti, non solo quello latino. –

1

Come per le altre risposte, costruire un'espressione regolare per i caratteri che permesso (per esempio da ogni alfabeto sostenete, e rimuovere altri personaggi. Ecco un elenco di Unicode Block Ranges per ottenere i valori/intervalli di caratteri per ogni lingua: è qualcosa che dovrai compilare tu stesso.

1

È poss È possibile verificare la presenza di caratteri e numeri unicode, ma solo se PCRE è stato compilato con
--enable-unicode-properties. In tal caso, è possibile utilizzare regex \p{Nl} che corrisponderà a lettere e numeri Unicode. Molte altre informazioni su unicode regex in PHP può essere trovato nel documentation

EDIT: Dopo modificare a mettere in discussione

Per ottenere l'utilizzo dei simboli \P invece di \p di nuovo guardare la documentazione di PHP ho linkato sopra .

+0

Vero amico mio. Ho già trovato qualcosa e ho già modificato la mia domanda. –

+0

@Jonur Ho aggiunto una modifica in risposta al tuo – RMcLeod

Problemi correlati