2013-05-24 17 views
9

Durch die Suche im Internet und diese Website habe ich mehrere Themen zu diesem Thema gefunden. Die Sache ist, es gibt unzählige Lösungen, wenn die eingefügten Strings nur Zeichen des lateinischen Alphabets enthalten müssen, aber wenn der Fall Text von anderen Alphabeten erfordert, wird es ein bisschen schwierig.PHP entfernen Symbole von String

Gibt es eine Möglichkeit, in PHP alle Symbole aus einer Zeichenfolge abzustreifen, aber die tatsächlichen Buchstaben aller UTF-8-Alphabete zu lassen? Ich habe versucht, bereits ein Array aller Zeichen meiner Tastatur zu erstellen und dann mit str_replace oder preg_replace sie zu entfernen, aber dann habe ich herausgefunden, dass verschiedene Länder manchmal auch verschiedene Tastaturen haben, die verschiedene Symbole enthalten. Zum Beispiel hat meine QWERTZ-Tastatur nicht das £ Symbol, das eine britische Tastatur haben könnte.

Ich weiß, dass das eine komische Frage ist, ich frage mich nur, ob es eine einfache Lösung dafür gibt, die ich vielleicht verpasst habe.

Jede Hilfe würde sehr geschätzt werden!

EDIT: OK Nachdem einige besser und erweitert Google-ing ich habe herausgefunden, dass die folgenden regulären Ausdruck funktioniert gut für das, was ich brauche, und es hält alle Buchstaben aller Arten von Alphabeten, während alle Symbole entfernt. Ich teile es hier für den Fall, dass jemand anderes dasselbe tun müsste.

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

Antwort

28

Die Lösung ist folgende: $string = preg_replace('/[^\p{L}\p{N}\s]/u', '', $string);

+1

hinzugefügt Ich liebe die Tatsache, dass dies UTF-8 kompatibel ist. – HoldOffHunger

1

Versuchen Sie folgendes:

<?php 

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

Die Sache ist die, dass die Zeichen 'äó' darf nicht, da sie in Worte und sind keine Symbole verwendet werden, entfernt werden. Im Gegenteil, das ':' sollte entfernt werden. –

+0

Oh! Ich dachte genau gegenüber. Die Frage war, Symbole aus der Zeichenfolge zu entfernen :) –

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

Wahr. Aber was ich brauche, ist etwas, das alle Alphabete erlaubt, nicht nur das Lateinische. –

1

sich nach den anderen Antworten, bauen einen regulären Ausdruck für die Zeichen, die Sie erlauben (zB von jedem Alphabet Sie unterstützen, und andere Zeichen entfernen. Hier ist eine Liste von Unicode Block Ranges, um die Zeichenwerte/Bereiche für jede Sprache zu erhalten - das müssen Sie selbst kompilieren.

1

Es ist mögl Es ist möglich, nach Unicode-Zeichen und -Zahlen zu suchen, aber nur, wenn PCRE mit
--enable-unicode-properties kompiliert wurde. Wenn dies der Fall ist, können Sie die Regex \p{Nl} verwenden, die Unicode-Buchstaben und Zahlen entspricht. Viel mehr Informationen über Unicode-Regex in PHP können in den documentation

EDIT finden: Nach bearbeiten

in Frage zu stellen Symbole \P statt \p wieder sehen Sie die PHP-Dokumentation ich oben verlinkten benutzen Sie .

+0

Wahr mein Freund. Ich habe schon etwas gefunden und meine Frage schon bearbeitet. –

+0

@ Jonur Ich habe eine Bearbeitung als Antwort auf Ihre – RMcLeod