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.