Frage

Ich habe auf eine bestimmte Zeichenfolge begegnet (es ist nicht vollständig druckbar, aber Sie können es unten sehen), in der ein HTMLSpecialChars () eine Null-Lang-Zeichenfolge zurückgibt.Gibt es irgendwelche Möglichkeit, dass das behoben werden kann?

generasacodicetagpre.

Ausgang:

generasacodicetagpre.

War es hilfreich?

Lösung

Ich verstehe jetzt, warum es eine Nullspannkette zurückgibt. Es tut mir leid, dass Sie diese Frage stellen. Ich hätte vor dem Posten mehr erforschen sollen. Jedenfalls ist die Antwort die folgenden:

Auf dem PHP-Handbuch Seite für htmlspecialChars :

Wenn die Eingangszeichenfolge eine ungültige Codeinheitsequenz innerhalb der gegebenen Kodierung enthält, wird eine leere Zeichenfolge zurückgegeben, sofern nicht entweder die Flags von ENT_IGNORE oder ENT_SUBSTITUTE eingestellt sind.

Dann frage ich mich, was über diese Zeichenfolge "ungültig" ist? Auf dem Wiki Seite für UTF-8 Es gibt ein gutes Diagramm von utf- 8 Kodierung. Alle Codepoints, die den "einfachen Text ASCII" darstellen, wären 0-127 (der MSB im Byte ist immer 0).

Wenn ein Bytes-MSB 1 (Dezimal 128 bis 255) ist (Dezimal 128 bis 255), erteilt er einem utf-8-kompatiblen Parser, dass der Codepoint aus einer Multi-Byte-Kette besteht. und die ersten beiden den ersten zwei wichtigsten Bits von Bytes müssen ein 1 gefolgt von einem 0 sein.

Natürlich in dieser Zeichenfolge gibt es einen Fall, in dem ein Byte über 127 ist und das folgende Byte nicht mit einem 1 & 0 beginnt. Daher ist es ungültige UTF-8-Kodierung.

danke für dies so post Für die Entschließung, die meiner Meinung nach das Flag ent_substitut verwenden soll (oder ich vermutete ENT_IGNHE, wenn Sie sicher sind, dass das Löschen dieser nicht konformen Bytes nicht ein Sicherheitsausgang ).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top