"Alles" in UTF-8 konvertieren
greg
- php
0 Christian Seiler0 greg
Hallo,
Ich suche eine PHP-Funktion, mit der ich folgendes machen kann:
a) alle Named Entities in UTF-8-Entities wandeln
b) Alleinstehende '&' in die entsprechende Entity wandeln
c) Alle non-ASCII-Zeichen (ISO-8859-15) ebenfalls nach UTF-8 wandeln
Ich würde gerne mit Hilfe des Output Buffers alles damit "säubern", bevor es an den Browser gelangt.
Ich konnte bis jetzt im Web und bei der PHP-Dokumentation nichts wirklich passendes finden. Hab ich da was übersehen? Ansonsten: kennt jemand etwas passendes, Anderes?
Sonst würde ich mich selbst drum kümmern, sowas zu schreiben. Bei dem Gedanken eine Konvertierungstabelle von Named Entities -> UTF-8 zu bauen, vergeht mir aber irgendwie die Lust...
Hallo greg,
a) alle Named Entities in UTF-8-Entities wandeln
http://de3.php.net/html_entity_decode
$text = html_entity_decode ($text, ENT_COMPAT, 'UTF-8');
b) Alleinstehende '&' in die entsprechende Entity wandeln
$text = str_replace ('&', '&', $text);
c) Alle non-ASCII-Zeichen (ISO-8859-15) ebenfalls nach UTF-8 wandeln
(dies solltest Du übrigens als erstes tun, bevor Du die anderen Dinge machst, denn falls durch die Named Entities bereits UTF8-Daten vorhanden sind, werden diese verhunzt)
http://de3.php.net/utf8_encode
$text = utf8_encode ($text);
Viele Grüße,
Christian
Erstmal vorweg: ich glaube, ich hab mich nicht so gut ausgedrückt. Ich meine kein UTF-8, sondern die Unicode-Entities in HTML. Beispiel: & für das Ampersand '&'.
a) alle Named Entities in UTF-8-Entities wandeln
http://de3.php.net/html_entity_decode
$text = html_entity_decode ($text, ENT_COMPAT, 'UTF-8');
Wie gesagt, ich will nur diese Unicode-Entities -- das hilft mir da nicht. Ich habs trotzdem mal ausprobiert: "cannot yet handle MBCS in html_entity_decode()". Vielleicht liegt's an meiner PHP-Version.
b) Alleinstehende '&' in die entsprechende Entity wandeln
$text = str_replace ('&', '&', $text);
Und woher weiß ich dabei, dass das '&' alleine steht (und nicht Teil eines Entities ist)? In dem zu verarbeitenden Source ist alles mögliche!
c) Alle non-ASCII-Zeichen (ISO-8859-15) ebenfalls nach UTF-8 wandeln
Hab ich verworfen, nicht nötig.
Mittlerweile steht meine Lösung jedoch und funktioniert für meinen (doch recht speziellen) Fall.
Moin!
$text = str_replace ('&', '&', $text);
Und woher weiß ich dabei, dass das '&' alleine steht (und nicht Teil eines Entities ist)? In dem zu verarbeitenden Source ist alles mögliche!
Das ist dann schlecht, weil du per Programm dann nicht entscheiden kannst, ob eine Konvertierung stattfinden soll, oder nicht.
Nur mal angenommen, du müßtest folgenden String konvertieren:
"Das und-Zeichen schreibt man &.".
Konvertieren oder nicht?
Nein, denn der Text hat sich nicht auf Entities bezogen, sondern wollte das &-Zeichen literal darstellen, die Entity ist also schon fertig.
Ja, denn der Text will die Entity darstellen, ist selbst aber ASCII und soll HTML werden.
- Sven Rautenberg
"Das und-Zeichen schreibt man &.".
Konvertieren oder nicht?
Ich überprüfe, ob das '&' Teil einer Entity ist. Wenn nicht, wird es konvertiert.
Wenn man als Endergebnis beim Browser '&' stehen haben will muss man etwas wie & verwenden.
greg
Moin!
Ich überprüfe, ob das '&' Teil einer Entity ist. Wenn nicht, wird es konvertiert.
Wenn man als Endergebnis beim Browser '&' stehen haben will muss man etwas wie & verwenden.
Eben, das ist genau das, was ich sagte: Du hast dich entschieden, dass im Ausgangstext Entities verwendet werden müssen, um die normalen Zeichen zu erhalten, weil du prüfst, ob die enthaltenen Entities korrekt sind. Du hast also nicht die große Undefiniertheit "da kann alles mögliche kommen".
Ob das gut ist oder schlecht, magst du selbst und deine Aufgabe entscheiden. Ich hab's nur angemerkt.
- Sven Rautenberg