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.
Codierungsfehler bei Benutzung von substr
Wenn du das Script posten würdest könnte man dir vielleicht besser helfen.
Ich verstehe jedoch momentan dein Problem nicht...
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
Administrator von http://www.aquarion.org
Bitte postet PHP-Codes immer immer mit
Code: Alles auswählen
und nicht mit [code]!
Habe es weggelassen weil ich dachte es sei nicht von belang
Das Problem ist folgendes. Je nach Anzahl der Zeichen steht dort entweder:
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("ü", "ä", $topic_title), 0, 10);
Das Problem ist folgendes. Je nach Anzahl der Zeichen steht dort entweder:
Sprich es hängt mit der Anzahl der Zeichen zurück ob ein Umlaut richtig umgewandelt wird oder nichtIch bin zur�
oder
Ich bin zurü
oder
Ich bin zurück
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!
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!
- gn#36
- Ehrenadmin
- Beiträge: 9313
- Registriert: 01.10.2006 16:20
- Wohnort: Ganz in der Nähe...
- Kontaktdaten:
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.
Übertreiben sollte man's im Forum aber nicht mit dem Chaos, denn da sollen ja andere durchblicken und nicht nur man selbst.