Birte W.: Text auf X Zeichen in While-Schleife kürzen

Hallo zusammen,

ich möchte einen text, den ich aus einer datenbank bekomme, auf X Zeichen kürzen. Ich habe dazu folgendes geschrieben und wollte fragen, ob bei meiner variante noch optimierungsbedarf aus eurer sich besteht. danke für die tipps!

  
  
<?php  
  
while ($nav = mysql_fetch_array($navigation_query)){  
  
$cutdesc = substr($nav['kat_description'], 0, 255);  
?>  
  
<a href="<?=$nav['link_aus_spalte1']?>"><img src="<?=$nav['bild_URL_aus_spalte2']?>"></a>  
  
<? echo($cutdesc) ?> [...]  
  

Vielen Dank!

  1. Hello,

    $cutdesc = substr($nav['kat_description'], 0, 255);

    Welche Zeichencodierung verwendest Du?

    Substr() ist nur für einbytige Codierungen gedacht.

    Liebe Grüße aus dem schönen Oberharz

    Tom vom Berg

    --
     ☻_
    /▌
    / \ Nur selber lernen macht schlau
    http://bergpost.annerschbarrich.de
    1. Welche Zeichencodierung verwendest Du?

      Substr() ist nur für einbytige Codierungen gedacht.

      Hallo Tom

      ich nutze UTF-8 als Codierung. Ist die Abfrage denn so wie sie ist optimal?

      Viele Grüße

      Birte

      1. Welche Zeichencodierung verwendest Du?

        Substr() ist nur für einbytige Codierungen gedacht.

        ich nutze UTF-8 als Codierung. Ist die Abfrage denn so wie sie ist optimal?

        Nein, wenn Du nur die ersten 255 Zeichen ausgeben möchtest, dann lass die Datenbank auch nur diese Zeichen zurückliefern (siehe MySQL SUBSTRING).

      2. Hello Birte,

        Welche Zeichencodierung verwendest Du?

        Substr() ist nur für einbytige Codierungen gedacht.

        ich nutze UTF-8 als Codierung. Ist die Abfrage denn so wie sie ist optimal?

        Wenn Du da ins PHP-Handbuch unter
        http://de3.php.net/manual/en/function.substr.php
        schaust, dann steht das da leider nicht dabei, dass substr() nur für einbytige Codierungen gedacht ist. Aber Du findest einen Verweis auf
        http://de3.php.net/manual/en/function.mb-substr.php
        Diese Funktion ist für multibytecodierte Zeichenketten gedacht.

        Aber wie zehbaeh das schon angedeutet hat https://forum.selfhtml.org/?t=209218&m=1423661 brauchst Du die Zeichen gar nbicht erst zu holen aus der Tabelle, wenn Du sie sowieso nicht verarbeiten willst, sondern kannst gleich der Datenbankl beim Select mitteilen, dass sie nur die ersten 255 Zeichen des Textes zurückliefern soll.

        http://dev.mysql.com/doc/refman/5.1/de/string-functions.html auf Deutsch, unübresichtlich
        http://dev.mysql.com/doc/refman/5.1/en/string-functions.html als übersichtliche Tabelle

        Liebe Grüße aus dem schönen Oberharz

        Tom vom Berg

        --
         ☻_
        /▌
        / \ Nur selber lernen macht schlau
        http://bergpost.annerschbarrich.de
  2. Tach!

    <a href="<?=$nav['link_aus_spalte1']?>"><img src="<?=$nav['bild_URL_aus_spalte2']?>"></a>
    <? echo($cutdesc) ?> [...]

    Kontextwechsel bei (allen) Ausgaben nicht vergessen! echo ist keine Funktion und benötigt keine Klammern. Wenn du die Kurzschreibweise <?= verwendest, kannst du sie auch statt des echo verwenden. (Hinweis: Wenn du für Plattformen mit PHP kleiner als 5.4 schreibst, auf denen short_open_tag ausgeschaltet sein kann, kannst du die Kurzschreibweise nicht verwenden.)

    dedlfix.

  3. Weiters: was bisher noch nicht gesagt wurde:

    Wenn dein Text z.B. noch Markup (also z.B. HTML) enthält, kann es sein, dass du hier fehler produzierst.

    Willst du also 255 Zeichen oder willst du 255 Zeichen + ggf. anfallendes Markup

    Beispiel: 9 Zeichen aus folgendem:

    <span>foo</span> bar baz qux

    <span>foo (9 Zeichen, mit zerstörtem Markup)
    <span>foo</span> (9 Zeichen + Vervollständigung des Markups)
    foo bar b (9 Zeichen ohne Markup)
    <span>foo</span> bar b (9 Zeichen ohne Markup, aber Markup beibehalten

    Daneben gibts noch einige weitere Möglichkeiten - z.B maximal 255 Zeichen aber nur ganze Wörter oder 255 Zeichen abzüglich Whitespace usw. das muss erstmal definiert werden.

    substr() oder mb_substr() sind jedenfalls Gnadenlos nur n Zeichen und beachten den Rest nicht.