Unicode unbekannt "�" Charakter-Erkennung in PHP
Gibt es eine Möglichkeit in PHP, die erkennen die folgenden Charakter -�
?
Ich bin derzeit auf der Festsetzung einer Reihe von UTF-8-Codierung Probleme mit ein paar verschiedenen algorithmen und müssen in der Lage sein zu erkennen, ob �
vorhanden ist, in einem string. Wie mache ich das mit strpos
?
Einfaches einfügen der Zeichen in meine codebase scheint nicht zu funktionieren.
if (strpos($names['decode'], '?') !== false || strpos($names['decode'], '�') !== false)
- versuchen Sie � anstelle von �
- Leider nicht.
- Dies ist der falsche Ansatz. Sollten Sie mehr info über das, was du tust, es gibt wahrscheinlich bessere Möglichkeiten, das zu tun, was Sie wollen
- zuletzt versuchen Sie es mit diesem 0x00 ? siehe fileformat.info/info/unicode/char/0000/index.htm
- Eric: Nein. Pekka: Einige lästige Saiten sind doppelt codiert und decodiert, wenn ? oder � zurückgegeben wird, dann wird die Zeichenfolge nicht doppelt codiert. Nicht sicher wie sonst zu erkennen.
- Ich nehme es den
0x00
Ansatz hat nicht funktioniert? - Leider nicht.
- Auch wenn die
==
(lose) Vergleich der � Zeichen mit 0x00 gelingt, für jemanden, der es nicht verwendet werden kann für die � Charakter-Erkennung, da die==
Vergleich mit 0x00 wird auch passieren, wenn im Vergleich zu""
oder"0"
. Sie müssen die===
(strengen) Vergleich der � Zeichen mit 0x00 die wird wohl scheitern.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Umwandeln einer UTF-8-string in UTF-8 mit
iconv()
mit der//IGNORE
parameter führt zu einem Ergebnis, wo ungültige UTF-8-Zeichen werden verworfen.Daher können Sie erkennen, ein Gebrochener Charakter, durch vergleichen der Länge des Strings vor und nach dem iconv-Betrieb. Wenn Sie sich unterscheiden, Sie enthalten einen gebrochenen Charakter.
Testfall (stellen Sie sicher, speichern Sie die Datei als UTF-8):
in der Theorie, Sie könnte fallen
//IGNORE
und einfach testen, ein Fehler (leere)iconv
Betrieb, es kann aber auch andere Gründe für eine "iconv" zu scheitern, als nur ungültige Zeichen... ich weiß nicht. Ich würde den Vergleich Methode."//IGNORE"
option kann nicht auf der neuesten Version von libiconv-Bibliothek, aber Sie können diese Problemumgehung verwenden:ini_set('mbstring.substitute_character', "none"); $teststring_converted = mb_convert_encoding($string, 'UTF-8', 'UTF-8');
Hier ist, was ich Tue, zu erkennen und zu korrigieren die Codierung von Zeichenfolgen, die nicht in UTF-8 kodiert, wenn das ist, was ich erwarte:
Soweit ich weiß, dass das Fragezeichen-symbol ist nicht ein einzelnes Zeichen. Es gibt viele verschiedene Zeichen-codes, die im standard-font-sets, die nicht zugeordnet, um ein symbol, und das ist das Standard-symbol verwendet wird. Zu tun-Erkennung in PHP, würden Sie zuerst wissen müssen, um welche schriftart es ist, dass Sie verwenden. Dann müssen Sie sich die schriftart, die Umsetzung und sehen, welche Bereiche des codes, die anzeigen, um das symbol"?", und dann sehen, wenn die angegebenen Zeichen in einem dieser Bereiche.
Verwende ich die CUSTOM-Methode (mit
str_replace
) zu desinfizieren Undefinierte Zeichen: