PHP-Quellcode in UTF-8-Dateien; wie man richtig interpretiert

Ich baue Werkzeuge, um den Quellcode zu analysieren. Solche Tools müssen die Quellcode-Dateien korrekt lesen, insbesondere in Bezug auf Zeichenkodierungen. Beispiel: "Was ist die genaue Zeichenfolge von Bytes in einem Zeichenfolgenliteral?" (sowohl PHP-Literale als auch HTML-Text).

Mein vielleicht falsches Verständnis ist, dass PHP-Quelldateien nur 8-Bit-Zeichen enthalten (das heißt, die PHP-Engine liest sie so [richtig] ?, da sie nur 8-Bit-Zeichen enthalten sollen). Aber acht-Bit-Zeichen inwelche Kodierung? (Ich nehme an, dass die Übereinstimmung mit ISO-8859-1 (-x?) [Kann jemand Kapitel und Verse zitieren?]. Das heißt, ein Umlaut soll ein Umlaut sein, richtig? Anschließend kann man PHP-Skripte mit HTML schreiben und Zeichenketten für die meisten europäischen Nationen / Zeichensätze direkt.

Es ist jedoch klar, dass dies bei Unicode problematisch ist. Soweit ich weiß, arbeiten die meisten PHP-Anwendungen mit Unicode im Wesentlichen mit Strings, die UTF-8-Byte-Sequenzen enthalten, die in 8-Bit-PHP-Strings eingefügt werden können. Anschließend können Sie Skripte generieren, deren HTML-Code Unicode-UTF-8-Sequenzen enthält, wenn Sie Ihrem Server mitteilen, dass Sie UTF-8-Text generieren.

In den oben genannten Situationen kann man die PHP-Datei als 8-Bit-Zeichentext lesen, und dies scheint mir der Sprache zu entsprechen.

Was mich verwundert, sind PHP-Quelldateien, die als UTF-8 codiert sind (das Joomla-Paket enthält ~ 1800 Quelldateien, von denen etwa 10 UTF-8 sind und die übrigen nicht). Alle (nicht-ASCII-) europäischen Zeichen, die in einem UTF-8-Rendering korrekt angezeigt werden, werden tatsächlich als Multibyte-Sequenzen codiert. Ich nehme an, dass solche Seiten, die als UTF-8 dienen, den HTML-Code korrekt wiedergeben. Aber alle Zeichenfolgenvergleiche für europäische Zeichen oder andere Unicode-Zeichen, die anscheinend in einem Texteditor korrekt dargestellt werden, funktionieren einfach nicht. Und String-Literale enthalten nicht das, was sie zu enthalten scheinen. Verwenden Programmierer UTF-8-Dateien, weil die Editoren dies anbieten? Tun sie das mit Absicht? Oder ist es nur ein Unfall, der für die meisten Arbeiten keine Rolle spielt?

Wie sollte man also eine PHP-Quelldatei lesen? (insbesondere in welcher Zeichenkodierung?) Eine mögliche Antwort ist, immer als ISO-8859-1-8-Bit-Code, unabhängig vom tatsächlichen Inhalt oder den Stücklisten (ich sehe viele UTF-8-BOM-markierte PHP-Dateien). Eine andere Antwort lautet UTF-8, falls dies markiert ist.

[Unsere Tools lesen und schreiben beliebige Kodierungen. Ein "triviales" Tool ist das Codieren von Dateien in einem Zeichen. Schreiben Sie identische Codepunkte in eine andere Codierung. Das Lesen von UTF-8-PHP-Dateien auf diese Weise führt zu Problemen beim Schreiben von ISO8859-1-äquivalenten Dateien, da viele UTF-8-Codepunkte (z. B. das Euro-Symbol) nicht in ISO8859-x codiert werden können.]

BEARBEITEN 30. August: Wir überprüfen nun PHP-Dateien, um festzustellen, ob UTF-8-Stücklisten vorhanden sind oder ob UTF-8-Sequenzen zulässig sind. In beiden Fällen lesen wir die Datei als UTF-8; Andernfalls wird es standardmäßig als ISO8859-1 gelesen. Wir behalten jetzt die Dateicodierung bei, wenn wir sie ändern. (Das alles in Ordnung zu bringen ist ziemlich viel Arbeit). Dies scheint eine sichere Strategie zu sein, die sich jedoch möglicherweise von den Erwartungen der PHP-Programmierer unterscheidet.

Antworten auf die Frage(3)

Ihre Antwort auf die Frage