2017-03-15 2 views
0

So habe ich diesen Code:filter_var() fügt das Symbol "A" auf das "©" Symbol

var_dump(trim(filter_var("\nLook ma, there are special characters:\n<>\"'&©", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH))); 

Welche Ausgabe wird dies:

string(66) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&&#194;&#169;" 

Das Problem, dass die enocoded ist Zeichen &#194; ist das Zeichen Â, das nicht im Originaltext war.

Meine Frage: Warum passiert das, und wie kann ich die zusätzlichen  Zeichen entfernen?

+0

Was ist das eigentliche Problem, das Sie zu lösen sind versuchen? Was ist dein Ziel? –

+1

Nicht sicher, es ist Hammer-würdig, aber das ist sehr verwandt http://stackoverflow.com/questions/279170/utf-8-all-the-way-through – Machavity

Antwort

1

Es ist kein zusätzliches Zeichen; Es ist das erste Byte eines Multibyte-Unicode-Zeichens.

Sie haben die Funktion tatsächlich aufgefordert, dies zu tun, indem Sie ihr den Flag-Ausdruck FILTER_FLAG_ENCODE_LOW | FILTER_FLAG_ENCODE_HIGH geben.

Wenn Sie kodieren nicht „high“ Werte, ändert sich das Ergebnis ist aber immer noch nicht sehr nützlich:

var_dump(trim(filter_var("\nLook ma, there are special characters:\n<>\"'&©", FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW))); 
// string(61) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&┬®" 

Was als nächstes wirklich tun auf Ihren Anforderungen abhängt. Ich vermute, dass filter_var nicht das ist, wonach Sie suchen, wenn Sie Unicode-Zeichen auch behandeln möchten.

Wenn ANSI genug für Sie ist, fand ich, dass eine schnelle Lösung war, meine PHP Quelldatei Codierung ANSI-Modus zu ändern (nicht UTF-8!), Fixieren die nun gebrochen „©“ Glyphe durch das Entfernen von verwaist "und führen Sie das Skript erneut aus:

// string(65) "&#10;Look ma, there are special characters:&#10;&#34;&#39;&&#169;" 

Aber das ist irgendwie begrenzt.

Haben Sie einen Lese durch die folgenden Handbuchseiten für weitere Informationen:

+0

Nun, das erklärt definitiv, warum (+1), ich immer noch muss wissen, wie man den Charakter entfernt. Ich denke, etwas mit 'mb_convert_encoding()' würde es beheben, aber ich weiß nicht genug über Zeichenkodierungen, um zu wissen, in welche es konvertiert werden soll. (Ich bearbeite Dateien im UTF-8-Modus, wenn das hilft) –

+0

Wir müssten genau wissen, was Ihr Ziel ist und speziell, was Ihre Anforderungen sind. Was willst du mit welchen Charakteren machen? Und aus welchem ​​Grund? –

+0

Der Ascii-Bereich reicht für mich, ich muss keine Benutzereingaben für Zeichen außerhalb dieses Bereichs unterstützen. (Allerdings muss ich UTF-8 im Quellcode unterstützen) –

Verwandte Themen