Rolf b: strlen & substr

Beitrag lesen

Da sich eine solche Aufgabe typischerweise wiederholt, und es immer gut ist, unterschiedliche Abstraktionsebenen der Programmlogik nicht in einen Klumpatsch zu vermengen, würde ich es eher so machen:

<?= htmlspecialchars(truncate_string_with_ellipsis($array['titel'], $zeichen)) ?>

und an anderer Stelle, wo Du deine Toolbox-Funktionen sammelst, dann

function truncate_string_with_ellipsis($longString, $maxLength)
{
   if (\strlen($longString) <= $maxLength)     // Länge nicht überschritten?
      return $longString;                      // --> Nichts tun

   return \substr($longString, 0, $maxLength-3) . '...';
}

Dazu folgende Anmerkungen:

  • Auslagern von Code in Funktionen bewirkt eine automatische Verbesserung der Lesbarkeit, wenn die Namen gut gewählt sind. Ob mein Name gut ist, weiß ich nicht recht, sicherlich gibt es auch andere Möglichkeiten, aber es ist auf jeden Fall so, dass der Leser des ersten Teils sich denken kann, dass hier der Titel abgeschnitten wird und eine Ellipse - "..." - angehängt wird. Normalerweise interessiert es den Leser der UI-Ebene nicht, wie genau das passiert. Es ist nur wichtig, DASS es passiert. Und wer das WIE doch wissen will, guckt eben in die Funktion. Wenn die Logik direkt in der UI-Ebene ist, muss man sie ständig mit lesen.
  • PHP Standardfunktionen präfixe ich immer mit einem , das ermöglich es mir, meinen eigenen Code in Namespaces aufzuteilen. Wenn Du keine Namespaces nutzt, kannst Du den Backslash auch weglassen.
  • Wenn der String zu lang ist, solltest Du ihn um 3 Zeichen mehr kürzen als die maximale Länge angibt, sonst ist er nach Anhängen des ... um bis zu 2 Zeichen zu lang. Das kann den von Dir gewünschten Effekt ruinieren
  • Auslagern in eine Funktion hat einen weiteren Vorteil, falls Du auf Unicode (UTF-8 Encoding) umstellst. Du kannst dann nicht mehr substr und strlen verwenden, sondern musst die mbstring Funktionen nutzen. Und wenn die Standard-String Funktionen nicht kreuz und quer verteilt sind, spart das Umstellarbeit. (Na gut, mbstring.func_overload=2 in der php.ini geht auch, aber manche sehen das als "kinda evil and gives you lots of headache"...)
  • Im Übrigen würde auch ich dazu raten, den String nur grob vorzukürzen (z.B. auf eine Länge von 2*$zeichen) und den Rest mit CSS zu machen. Ein exaktes Kürzen auf eine bestimmte Anzahl von Zeichen funktioniert im Zusammenhang mit proportionalen Schriften schlecht. CSS berücksichtigt die Zeichenbreiten und kürzt entsprechend.

Rolf