Durch Zufall ist mir aufgefallen, dass phpBB Unicodebeiträge z.B. mit chinesischen Schriftzeichen fehlerfrei einlesen und darstellen kann, ohne dass dies PHP oder MySQL unterstützen würden. Sämtliche durch ein IME eingegebene Zeichen werden in Unicode-Entities (&#xxxxx;) umgewandelt und auch so in der Datenbank abgespeichert. Das gefällt mir sehr gut, da dadurch die gewählte Codierung völlig irrelevant ist (eine komplette Unicode-Schriftart natürlich vorausgesetzt).
Nun benötige ich genau so eine Unicode-Unterstützung für ein Projekt, habe aber bei Untersuchung des phpBB Quellcodes nicht herausfinden können, wie genau die Umwandlung der Nicht-ASCII-Zeichen in der Textbox in Entitities, und umgekehrt, realisiert wird. Wer kann mir da weiterhelfen?
Wie funktioniert die Unicode-Unterstützung von phpBB?
-
- Mitglied
- Beiträge: 153
- Registriert: 11.10.2003 12:33
- Kontaktdaten:
includes/functions_post.php
setz die "Umwandlungsarrays" (hol dir das lieber nochmal aus der Datei, kann sein, dass das Board jetzt beim posten was durcheinanderwürfelt...).
Und angewendet werden sie so:
Code: Alles auswählen
$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#');
$html_entities_replace = array('&', '<', '>');
$unhtml_specialchars_match = array('#>#', '#<#', '#"#', '#&#');
$unhtml_specialchars_replace = array('>', '<', '"', '&');
Und angewendet werden sie so:
Code: Alles auswählen
preg_replace($html_entities_match, $html_entities_replace, $message);
preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, $message)
Das hatte ich auch schon gefunden, aber es funktioniert nicht. Ich bekomme als Ergebnis, wenn ich mit echo htmlspecialchars(...); ausgebe, nur ein Kauderwelsch.R. U. Serious hat geschrieben:includes/functions_post.php
setz die "Umwandlungsarrays" (hol dir das lieber nochmal aus der Datei, kann sein, dass das Board jetzt beim posten was durcheinanderwürfelt...).Code: Alles auswählen
$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#'); $html_entities_replace = array('&', '<', '>'); $unhtml_specialchars_match = array('#>#', '#<#', '#"#', '#&#'); $unhtml_specialchars_replace = array('>', '<', '"', '&');
Und angewendet werden sie so:
Code: Alles auswählen
preg_replace($html_entities_match, $html_entities_replace, $message); preg_replace($unhtml_specialchars_match, $unhtml_specialchars_replace, $message)