Ersetzen Sie diese Hex-chars von string in PHP
Ich bin die Generierung eines XML-Daten aus einer Datenbank (und einige JSON-feeds).
Ich habe einige Probleme mit einigen Texten, die enthält einige hex-chars, brechen meine XML.
Siehe zum Beispiel dieser screenshot von der Fehlermeldung, die ich von Chrome:
Identifizierte ich die hex-Zeichen sind, die mir Probleme (ich glaube, Sie sind sogenannte steuerzeichen). Und diese sind:
0x03
0x05
0x16
0x0E
Wie kann ich diese Zeichen ersetzen mit PHP, vor dem drucken auf meinem XML-Ausgabe?
Dank!
InformationsquelleAutor Guillermo | 2012-04-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Mehr als nur diese Zeichen wird es brechen...
\x7f
zu\xc2\x9f
(siehe utf8-chartable.de)Ein anderes Steuerelement einstellen, beginnt ab der x80 (oder x7F wenn Sie wollen, um es aufzunehmen) , 9F. \xc2 schrieben Sie, wie hex bedeutet "Controlset 2" in deinem link. kurz gesagt c2 So seine Steuerung Set 2 \x9F ist. Für Klarheit
InformationsquelleAutor Ignacio Vazquez-Abrams
Den Zeichen, die Sie Liste sind in der Tat steuerzeichen, alle in der C0-set:
Sollten Sie überprüfen, wie diese Zeichen gingen in den string. Ich kann nicht wirklich empfehlen, Sie zu entfernen (wenn Sie planen, Sie zu entfernen, verwenden Sie mindestens eine substitution Charakter, das nicht nur entfernen Sie Sie), aber ein bisschen konservativer als diejenigen, die nicht die ungültige unicode, einfach konvertieren Sie Sie in numerische Entitäten (dies wurde erfolgreich durchgeführt, auch hier):
Hoffe, das ist hilfreich.
Ja, innerhalb von CDATA müssten un-CDATA ' Ing diese Bereiche zuerst. Zusätzlich re-Lektüre Ihrer Frage, technisch ist das Zeichen nicht ungültig UTF-8, nur ungültige SGML.
InformationsquelleAutor hakre
Wenn der Eingang verspricht einen bestimmten Charakter festgelegt haben, können Sie wahrscheinlich verwenden Sie eine der Zeichensatz-Codierung Funktionen zu behalten, die die meisten möglichen Daten (ohne lästigen fehlende Zeichen; text Aussehen kann, versaut ohne Sie!). Es ist möglich, dass utf8_encode könnte Ihnen helfen, aber nur, wenn Sie wissen, dass der text nach ISO-8859-1. Andernfalls müssen Sie möglicherweise mehr Glück mit iconv, vorausgesetzt du hast es installiert.
Die beste Sache über iconv, meiner Meinung nach, ist die Fähigkeit, transliteration, wenn Sie downconverting von UTF zu einem weniger fähigen Zeichensatz. Wenn Sie die Kodierung auf UTF-8, obwohl, würden Sie wahrscheinlich wollen Sie so etwas wie dieses:
InformationsquelleAutor Kevin Nielsen
[[^0]...]
? Was sollte dieser tun?Ausschließen jedes Zeichen außer der Ziffer 0
Sie können nicht Charakter-Klassen innerhalb von Klassen. Man kann auch nicht mehrere
-
innerhalb einer Charakter-Klasse. Der reguläre Ausdruck ist ungültig.Sorry, ich bin neu in regex-patterns, wurde aber nur versucht zu helfen mit dem, was ich weiß. Wahrscheinlich sollte ich es getestet habe, bevor ich gepostet.
leider regex macht nicht viel Sinn...
InformationsquelleAutor Tower