2017-07-10 4 views
0

ich Probleme habe einen seltsamen Charakter zu erfassen und herausfiltern einige Daten kamen mit, die JSON-Daten verursacht, die sie enthalten, nicht korrekt analysiert werden. Ich weiß nicht, warum, weil sie nicht in der weißen Liste enthalten ist ich mit diesem regulären Ausdruck erstellt:Ich kann nicht einen seltsamen Charakter mit regulären Ausdrücken erfassen

$string = preg_replace('/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/\s\\<>,;:.*\[\]\(\)+?¿!&%@=]/', '', $string); 

Testing regulären Ausdruck auf Regexr. Wie Sie sehen werden, ist dieses seltsame Zeichen nicht Testing regular expression on Regexr

erfasst Dies ist, wie sie im Browser angezeigt wird:

This is how it is displayed in the browser

Und das ist, wie es in Pluma (ein Linux-Editor) angezeigt ist:

this is how it's displayed in Pluma (a Linux editor)

Wenn ich es kopieren und versuchen, es in Google einzufügen, zum Beispiel, wird nichts eingefügt. Wirklich seltsam. Ich bin noch nie in so einer Situation gelandet.

Irgendeine Idee, wie man damit umgeht?

+0

@ MátéSolymosi Ich benutze eine Whitelist. Diejenigen Zeichen, die dem nicht entsprechen, sollten durch eine leere Zeichenfolge ersetzt werden. –

+0

Können Sie dem Fragetext das problematische Zeichen hinzufügen? Ich konnte es anhand des Screenshots nicht identifizieren. –

+0

Haben Sie versucht es einfach zu kopieren und in Ihren Regex in einem UTF8-Editor einzufügen? – Bernhard

Antwort

2

Dieser mysteriöse Charakter ist nicht so geheimnisvoll, ist aber schwer mit Ihrem Editor angezeigt werden, da sie dem Seite brechenden Steuerzeichen sind: Formfeed (\x0C die ASCII-Tabelle sehen)

Dieses Zeichen enthalten ist, in Die \s Zeichenklasse, deshalb stimmt Ihr Muster nicht überein.

Eine Lösung besteht darin, die \s aus Ihrem Muster zu entfernen und durch eine erschöpfende Liste von zulässigen Leerzeichen zu ersetzen.

Um die Dinge einfacher Sie bereits die Klasse setzen können \h (falls unterstützt), die alle horizontalen Leerzeichen enthält. Fügen Sie dann die gewünschten vertikalen Leerräume von Hand hinzu.

Beachten Sie, wenn Sie mit der Windows-1252-Codepage arbeiten, halten Sie es unter den Augen sicher zu sein, nichts zu vergessen und das Muster unter Verwendung von Zeichenkette zu verkürzen.

+1

Vielen Dank! Scheint so, als hättest du geantwortet, während ich meine eigene Antwort geschrieben und gepostet habe. Ich habe es woanders gefunden. Sowieso. Es ist fair, dass ich deine als die akzeptierten statt meiner ankreuze. –

1

Ich habe es!

Stellt sich dieses Zeichen a für form feed out

es in \ s enthalten ist wie weißer Raum, \ t, \ r oder \ n.

von spezifischer sind, erreicht ich, was ich wollte. Die neue Regex:

/[^\w\dñÑáéíóúÁÉÍÓÚüܺª\-_\/ \r\n\\<>,;:.*\[\]\(\)+?¿!&%@=]/ 
Verwandte Themen