Start · Sprachen · PHP · Kapitel · Strings
// Kapitel · PHP

Strings

PHP hat die vielleicht umfassendste String-Bibliothek aller Sprachen. Achte auf UTF-8 und nutze die mb_*-Funktionen.

Kurzantwort
Strings in PHP — kurz erklärt

Strings in PHP sind Byte-Sequenzen (keine echten Unicode-Strings). strlen() zählt Bytes, nicht Zeichen. Für Multi-Byte-Operationen immer die mb_*-Funktionen nutzen (mb_strlen, mb_substr, mb_strtolower) und das Encoding (meist UTF-8) explizit setzen.

String-Operationen

$s = 'programmierung.net';

strlen($s);              // 18 (Byte-Länge, nicht Zeichen!)
mb_strlen($s);           // 18 (Zeichen-Länge, UTF-8-sicher)
strtoupper($s);          // 'PROGRAMMIERUNG.NET'
str_replace('.net', '.de', $s);
str_contains($s, 'net'); // true (PHP 8.0+)
str_starts_with($s, 'prog');
str_ends_with($s, '.net');
substr($s, 0, 12);       // 'programmieru'
explode('.', $s);        // ['programmierung', 'net']
implode(', ', $arr);
trim("  hallo  ");       // 'hallo'

Vorsicht: UTF-8

strlen() zählt Bytes, nicht Zeichen. Für internationalen Text immer mb_*-Funktionen nutzen:

$s = 'Größe';
strlen($s);       // 6 (weil ö = 2 Bytes in UTF-8)
mb_strlen($s);    // 5 (korrekt)

Heredoc & Nowdoc

Für mehrzeilige Strings mit oder ohne Variablen-Interpolation:

$name = 'Anna';

// Heredoc — mit Interpolation (wie doppelte Anführungszeichen)
$mail = <<<MAIL
Hallo $name,

willkommen auf programmierung.net.

Gruß
MAIL;

// Nowdoc — OHNE Interpolation (wie einfache Anführungszeichen)
$sql = <<<'SQL'
SELECT * FROM users WHERE email = ?
SQL;

Formatierung mit sprintf

$preis = 19.99;
echo sprintf('%.2f €', $preis);           // 19.99 €
echo sprintf('%05d', 42);                 // 00042
echo sprintf('%s hat %d Punkte', 'Anna', 100);

Häufige Fragen

Wann nutze ich <code>sprintf()</code> statt Konkatenation?

Immer, wenn Formatierung ins Spiel kommt: Zahlen mit Nachkommastellen (%.2f), Padding (%05d) oder lokalisierbare Vorlagen. sprintf ist auch sicherer gegen Encoding-Fehler als .-Konkatenation.

Was ist der Unterschied zwischen einfachen und doppelten Anführungszeichen?

Einfache Anführungszeichen ('...') sind literale Strings — $var und Escape-Sequenzen (außer \\ und \') bleiben wörtlich. Doppelte ("...") interpolieren $var und werten \n, \t etc. aus.

Wie prüfe ich, ob ein String mit einem bestimmten Präfix beginnt?

Seit PHP 8.0 direkt mit str_starts_with($str, "prefix"). Analog: str_ends_with() und str_contains(). Vor 8.0: strpos($str, "prefix") === 0.

Wie wandele ich einen String sicher nach UTF-8?

Mit mb_convert_encoding($str, "UTF-8", "auto") oder — zuverlässiger — bei bekanntem Quell-Encoding: mb_convert_encoding($str, "UTF-8", "ISO-8859-15"). Prüfung vorher: mb_check_encoding($str, "UTF-8").

Wie escape ich einen String für HTML-Ausgabe?

Immer htmlspecialchars($str, ENT_QUOTES | ENT_SUBSTITUTE, "UTF-8"). In Laravel-Templates: {{ $var }} macht das automatisch; {!! $var !!} gibt dagegen roh aus — nur mit vorab bereinigtem HTML.