Unicode-Zeichen in topic_title und post_subject

Probleme bei der regulären Arbeiten mit phpBB, Fragen zu Vorgehensweisen oder Funktionsweise sowie sonstige Fragen zu phpBB im Allgemeinen.
Forumsregeln
phpBB 2.0 hat das Ende seiner Lebenszeit überschritten
phpBB 2.0 wird nicht mehr aktiv unterstützt. Insbesondere werden - auch bei Sicherheitslücken - keine Patches mehr bereitgestellt. Der Einsatz von phpBB 2.0 erfolgt daher auf eigene Gefahr. Wir empfehlen einen Umstieg auf phpBB 3.1, welches aktiv weiterentwickelt wird und für welches regelmäßig Updates zur Verfügung gestellt werden.
Antworten
thpitsch
Mitglied
Beiträge: 3
Registriert: 21.02.2005 13:14

Unicode-Zeichen in topic_title und post_subject

Beitrag von thpitsch »

In meinem Forum, in dem es um die Thai-Sprache geht, gibt es Probleme, wenn eben diese Sprache in topic_title und post_subject verwendet wird. In forum_name dagegen funktioniert es bestens.

phpBB ersetzt "&" html-konform durch "&", dadurch wird allerdings die Codierung der Unicode-Zeichen (z. B. &# 3652;) zu "ไ" und damit nicht mehr als Zeichen darstellbar. Wenn ich in der Datenbank die eingefügten "amp;" entferne, wird die Schrift richtig angezeigt, wenn auch etwas zu klein.

Kann mir jemand helfen, dafür zu sorgen, dass diese Ersetzung beim Schreiben in die Datenbank nicht statt findet? Bei forum_name und im Text wird es ja auch nicht gemacht. Schön wäre es außerdem, wenn ich die Schrift bei der Anzeige derartig codierter Zeichen automatisch vergrößern könnte.

Leider bin ich kein php-Programmierer, komme aber mit der Art der Anweisungen bei mods ganz gut zurecht.
Benutzeravatar
D@ve
Ehemaliges Teammitglied
Beiträge: 3842
Registriert: 28.08.2002 19:33
Wohnort: Bretzfeld
Kontaktdaten:

Beitrag von D@ve »

Also den entsprechenden Teil findest Du in der includes/functions_post.php, irgendwo bei Zeile 150 ff bei

Code: Alles auswählen

   // Check subject 
Dort wird mit htmlspecialchars() die Sonderzeichen in Ihre HTML-Pedate umgewandelt.

Allerdings solltest Du bedenken, dass Du Dir mit der entfernung der Funktion ein Sicherheitsloch einbaust, ganz zu schweigen davon, dass Dir ein Poster mit einem entsprechenden Subjekt ziemlich schnell das Design zerlegen kann.
Ich kenn mir mich mit diesem Schrift-Kram nicht so wirklich aus, aber wäre es nicht einfacher von vornherein mit einem anderen Charset zu arbeiten?

Gruß, Dave
There are only 10 types of people in the world: Those who understand binary, and those who don't
thpitsch
Mitglied
Beiträge: 3
Registriert: 21.02.2005 13:14

Beitrag von thpitsch »

Danke, diese Stelle habe ich gesucht...

Am Anfang der gleichen Datei finde ich

$html_entities_match = array('#&(?!(\#[0-9]+;))#', '#<#', '#>#');
$html_entities_replace = array('&', '<', '>');

Auch wenn ich die regex nicht hundertprozentig verstanden habe, glaube ich doch, dass sie genau dann eine Ausnahme macht, wenn das Ampersand in etwas wie "Ӓ" steht und preg_replace() in diesem Fall nicht ersetzt. Was sagen deine Sicherheitsbedenken, wenn ich die vorhandene Zeile (an der von dier angegebenen Stelle)

$subject = htmlspecialchars(trim($subject));

durch

$subject = preg_replace($html_entities_match, $html_entities_replace, $subject);

ersetze? Würde der Code funktionieren?

Normale Ampersand würden dann ersetzt, die von Unicode-Zeichen nicht.

Mit einem anderen Charset zu arbeiten scheidet aus, da alle modernen Betriebssysteme (Windows, Mac, Linux) mittlerweile Unicode genau so in Webformulare eintragen.
thpitsch
Mitglied
Beiträge: 3
Registriert: 21.02.2005 13:14

Problem gelöst

Beitrag von thpitsch »

Ich habe es jetzt so gemacht:

$subject = str_replace('&#', '&#', htmlspecialchars(trim($subject)));

d.h. ich lasse die specialchars zwar ersetzen, tausche jedoch die Kennung für Unicodes wieder zurück. Und es funktioniert!

Danke für den Tip!

Gruß
Theo
Antworten

Zurück zu „phpBB 2.0: Administration, Benutzung und Betrieb“