Falsche Umlaute beim kürzen (versteh es einfach nicht)

  • Hallo,

    Für mich ist das Problem unerklärlich, vielleicht kann es mir jemand von euch erklären und es lösen.

    Sobald ich die Titel im Index meines Blogs kürze... mit diesem Code:

    PHP
    <a href="<?php the_permalink() ?>"><?php if (strlen($post->post_title) > 60) {
    echo substr(the_title($before = '', $after = '', FALSE), 0, 60) . '...'; } else {the_title();} ?></a>

    Werden die Umlaute nicht mehr richtig angezeigt. Dass passiert aber immer nur bei einer bestimmten Anzahl an Buchstaben (das ist ja das merkwürdige).

    Wird ein Wort wie "Zerstörung" gekürzt, klappt das ohne Probleme. Es kommt dann zum Beispiel als "Zerstör..." heraus.

    Das merkwürdige... sobald ich mich dem Ö nähere (Also die Zeichenanzahl veringer) gehen die Probleme los.

    "Zerstö..." geht noch, doch ein Buchstabe weniger danach (wo das Ö ja eigentlich weg sein sollte also "Zerst..." angezeigt werden sollte) wird ein falscher Umlaut angezeigt. Also diese komischen Fragezeichen mit dunklem Hintergrund.

    Kann mir jemand klarmachen warum das so ist? ich raff es einfach nicht.

    • Anzeige

    Hallo!

    Wenn du gerade an deiner Website arbeitest oder dein aktuelles Hosting überdenkst: Wir betreiben mit NetzLiving eine Hosting-Plattform, die speziell auf Performance, Sicherheit und einfache Verwaltung ausgelegt ist.

    • ✔️ Schnelle Ladezeiten (optimiert für WordPress & Co.)
    • ✔️ Deutsche Server & DSGVO-konform
    • ✔️ Persönlicher Support (kein 0815-Ticket-System)

    Mehr erfahren

  • Das Problem taucht oft auf, daher ist es besser den Text jeweils nach einem Wort zu kürzen. Also Anzahl gewünschte Zeichen erreicht = Aussgabe bis zum Rest vom Wort.

    So irgendwie müsste es gehen:

    PHP
    if ((strlen($post->post_title)>60) && ($espacio = strpos($post->post_title, " ", 60))) {
    echo substr(the_title($before = '', $after = '', FALSE), 0, $espacio) . '...';
    }

    Vielleicht gibt es aber auch eine bessere Lösung...

  • Das ö wird mit zwei Bytes abgespeichert. Für Multi-Byte-Zeichenketten kann man mb_strlen() statt strlen() verwenden, dann werden die Buchstaben richtig gezählt. Und zusätzlich noch mb_substr() statt substr()

  • Danke für die Erklärung.

    @spickzettel
    Wie müsste der Code dann aussehen, damit es funktioniert. Entschuldige, bin wieder ein absoluter Anfänger bzw. Halbiwssender ;) und möchte nichts falsche machen.

    Danke aber an euch beide für die Erklärung, klingt einleuchtend.

  • PHP
    <a href="<?php the_permalink() ?>"><?php if (mb_strlen($post->post_title) > 60) {
    echo mb_substr(the_title($before = '', $after = '', FALSE), 0, 60) . '...'; } else {the_title();} ?></a>

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!