Codierungsfehler bei Benutzung von substr

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Codierungsfehler bei Benutzung von substr

Beitrag von Seether »

Hallo Leute,

ich lese derzeit die Topics aus und will sie an anderer Stelle anzeigen lassen.

Beispielsatz:
Ich bin zurück

Bei zu langen Topics lass ich mit substr den String abschneiden und setze 3 ... dran.

So nun habe ich das Problem, dass wenn der Schnitt direkt vor einem Umlaut erfolgt auf der Webseite das Rautensymbol mit ? des Firefox angezeigt wird....
Testweise habe ich dann die angezeigten Stellen um 1 erhöht und dann wird das ü sauber ausgegeben...

Ich kapiere die Logik dahinter nicht... Jemand von euch?

S.
Valerion
Mitglied
Beiträge: 70
Registriert: 11.08.2006 17:30

Beitrag von Valerion »

Wenn du das Script posten würdest könnte man dir vielleicht besser helfen.
Ich verstehe jedoch momentan dein Problem nicht...
Mit Freundlichen Grüßen, Valerion.
Administrator von http://www.aquarion.org
Bitte postet PHP-Codes immer immer mit

Code: Alles auswählen

 und nicht mit [code]!
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Beitrag von Seether »

Habe es weggelassen weil ich dachte es sei nicht von belang

Code: Alles auswählen

$sql = "SELECT t.topic_title 
        FROM phpbb3_topics t
        LEFT JOIN phpbb3_posts p ON (t.topic_id = p.topic_id)
        ORDER by p.post_time DESC
        LIMIT 5";
$result = $db->sql_query($sql);
while ($row = $db->sql_fetchrow($result))
{
	$topic_title = $row['topic_title'];
	$topic_title = (strlen($topic_title) < 11 ) ? $topic_title : substr(str_replace("ü", "&auml", $topic_title), 0, 10);

Das Problem ist folgendes. Je nach Anzahl der Zeichen steht dort entweder:
Ich bin zur�
oder
Ich bin zurü
oder
Ich bin zurück
Sprich es hängt mit der Anzahl der Zeichen zurück ob ein Umlaut richtig umgewandelt wird oder nicht
BB-BF-BM
Mitglied
Beiträge: 2179
Registriert: 28.10.2005 16:38
Wohnort: Essen

Beitrag von BB-BF-BM »

Hallo!

Da PHP UTF-8 erst mit Version 6 vollständig unterstützen wird, muss man sich bei String-Funktionen bisher selbst helfen. phpBB3 bietet glücklicherweise in der Datei /includes/utf/utf_tools.php eine Funktionssammlung an, die UTF-8-sichere String-Funktionen enthält.
An dieser Stelle sollten für dich utf8_strlen() und utf8_substr() geeignet sein!
Seether
Mitglied
Beiträge: 1446
Registriert: 10.10.2002 23:42

Beitrag von Seether »

BB-BF-BM hat geschrieben:Hallo!
An dieser Stelle sollten für dich utf8_strlen() und utf8_substr() geeignet sein!
Es läuft! Hammer Tipp :D
Benutzeravatar
gn#36
Ehrenadmin
Beiträge: 9313
Registriert: 01.10.2006 16:20
Wohnort: Ganz in der Nähe...
Kontaktdaten:

Beitrag von gn#36 »

Vielleicht noch als Hintergrund um den Fehler besser verstehen zu können: Bei einem UTF8 encodierten String bestehen reguläre ASCII Zeichen (also a-z 0-9 usw.) aus einem Byte. Sonderzeichen die nicht im Standard ASCII Satz enthalten sind werden mit zwei Byte encodiert, sind also doppelt so lang. Andere Zeichensätze regeln das anders (z.b. indem alle Zeichen ein zusätzliches Bit spendiert bekommen verdoppelt man den möglichen Zeichenbereich). Wenn jetzt eine Funktion stur nach der Zeichenzahl geht und dabei ignoriert dass es Zeichen geben kann die doppelt so lang sind dann kann es passieren, dass sie mitten in einem Buchstaben durchschneidet, mit obigem Ergebnis.
Begegnungen mit dem Chaos sind fast unvermeidlich, Aber nicht katastrophal, solange man den Durchblick behält.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.
Antworten

Zurück zu „Coding & Technik“