Spezielle Sonderzeichen in Strings verwenden (Thema: PHP Beispiele)

Wie bestimmte und häufig verwendete Sonderzeichen in PHP in Strings eingefügt werden können

1. Einleitung

PHP sind einige spezielle ASCII-Sonderzeichen bekannt, welche in Strings verwendet werden können. Die Schreibweise für ein solches Sonderzeichen lautet \?, wobei „?” durch einen Buchstaben ersetzt wird, der das gewünschte Zeichen identifiziert. Die Liste der möglichen Zeichen und ihre Bedeutung kann der nachfolgenden Tabelle entnommen werden. Voraussetzung zur Verwendung ist aber, dass der String in doppelten Anführungszeichen definiert wird — und nicht in einfachen (siehe anschließendes Beispiel).

Schreibweise ASCII-Nummer Dezimal ASCII-Nummer Hex Erzeugtes Zeichen
\t 9 09 Horizontaler Tabulator: Entspricht dem Zeichen, das beim Drücken der Tab-Taste erzeugt wird.
\n 10 0A Zeilenvorschub/linefeed: Erzeugt eine neue Zeile
\v 11 0B Vertikaler Tabulator: Zeiger auf die nächste Zeile setzen.
\f 12 0C Seitenvorschub/form feed: Setzt den Zeiger auf die nächste Seite
\r 13 0D Wagenrücklauf/carriage return: Setzt den Zeiger auf den Anfang der Zeile
\e 27 1B Escape-Symbol: Markiert den Anfang einer Escape-Sequenz

Von den genannten Zeichen ist \n mit Abstand am wichtigsten, da es immer verwendet werden muss, wenn man einen Zeilenumbruch erzeugen will. Es ist bei der Generierung von Webseiten üblich, nur \n und nicht die Kombination \r\n zu verwenden. Dennoch sollte man die Bedeutung von \r im Kopf behalten, da unter Windows in der Regel Zeilen mit \r\n beendet werden. (Im Code sollte man trotzdem nur \n verwenden, was von allen gängigen Webbrowsern korrekt interpretiert wird.) Vereinzelt wird man \t benötigen, etwa wenn aus Benutzereingaben alle Tabs entfernt werden sollen. Die Symbole \v, \f und \e hingegen werden im Grunde nie verwendet. Üblich sind unter ASCII zudem die Sonderzeichen \a (Bell/Tonsignal) und \b (Backspace). Laut php.net werden diese allerdings nicht von PHP interpretiert.

2. Beispiel

In diesem Beispiel werden zwei Strings definiert. Einer von diesen enthält keine Sonderzeichen, der andere wiederum drei Tabs (\t) und einen Zeilenumbruch (\n). Bei der Ausgabe ist deutlich zu erkennen, dass die Sonderzeichen von PHP korrekt interpretiert werden.

PHP-Code
<?php
	$str1 = "Dies ist ein String ohne 3 Tabs und Zeilenumbruch. Ende.";
	$str2 = "Dies ist ein String mit 3 Tabs und 1 Zeilenumbruch: \t\t\t, Ende.\n";
	
	echo("[START]{$str1}[ENDE]");
	echo("\n\n\n");
	echo("[START]{$str2}[ENDE]");
?>

HTML-Code: Ausgabe
[START]Dies ist ein String ohne 3 Tabs und Zeilenumbruch. Ende.[ENDE]


[START]Dies ist ein String mit 3 Tabs und 1 Zeilenumbruch: 			, Ende.
[ENDE]

Im vorherigen Beispiel wurden die Strings über doppelte Anführungszeichen definiert. Wie nun gezeigt wird, können diese nicht problemlos durch einfache Anführungszeichen ausgetauscht werden, da sonst die Sonderzeichen nicht mehr interpretiert werden. Dies gilt insbesondere auch für den Zeilenumbruch, was dazu führt, dass bei Verwendung von einfachen Anführungszeichen kein Zeilenumbruch über „\n” platziert werden kann. Die Definition der Variable $str3 zeigt den Workaround: Man verbindet (konkateniert) mit einem String in doppelten Anführungszeichen. (Alternativ ist es natürlich auch möglich, einen echten Zeilenumbruch per Enter-Taste einzufügen. Je nach Kontext kann dies aber unerwünscht sein, schließlich erzeugt dies auch einen Zeilenumbruch im Code.)

PHP-Code
<?php
	$str1 = 'Dies ist ein String ohne 3 Tabs und Zeilenumbruch. Ende.';
	$str2 = 'Dies ist ein String mit 3 Tabs und 1 Zeilenumbruch: \t\t\t, Ende.\n';
	$str3 = 'Dies ist ein String ohne Tabs aber mit einem Zeilenumbruch.' . "\n";
	
	echo("[START]{$str1}[ENDE]");
	echo("\n\n\n");
	echo("[START]{$str2}[ENDE]");
	echo("\n\n\n");
	echo("[START]{$str3}[ENDE]");
?>

HTML-Code: Ausgabe
[START]Dies ist ein String ohne 3 Tabs und Zeilenumbruch. Ende.[ENDE]


[START]Dies ist ein String mit 3 Tabs und 1 Zeilenumbruch: \t\t\t, Ende.\n[ENDE]


[START]Dies ist ein String ohne Tabs aber mit einem Zeilenumbruch.
[ENDE]

3. Backslash, Dollarzeichen und doppelte Anführungszeichen verwenden

Neben den bereits genannten Sonderzeichen gibt es auch PHP-spezifische, welche „umschrieben” werden müssen, um sie in Strings zu verwenden, da es sich bei diesen um Steuerungszeichen von PHP handelt. Die Umschreibung erfolgt, indem den Zeichen ein Backslash vorangstellt wird — indem sie also escapet werden. Diese Zeichen sind:

  • Der Backslash (wird zu \\).
  • Das Dollarzeichen (wird zu \$).
  • Doppelte Anführungszeichen (werden zu \").
  • Einfache Anführungszeichen (werden zu \').

Die doppelten Anführungszeichen und das Dollarzeichen müssen nicht escapet werden, wenn der String über einfache Anführungszeichen definiert wird. Bei Definition über doppelte Anführungszeichen müssen wiederum die einfachen Anführungszeichen nicht escapet werden.

Das erste Beispiel zeigt das Escapen in doppelten Anführungszeichen:

PHP-Code
<?php
	$str = "PHP-Sonderzeichen: '\"\$\\ - Ende.";
	var_dump($str);
?>

HTML-Code: Ausgabe
string(31) "PHP-Sonderzeichen: '"$\ - Ende."


Das zweite Beispiel zeigt das Escapen in einfachen Anführungszeichen:

PHP-Code
<?php
	$str = 'PHP-Sonderzeichen: \'"$\\ - Ende.';
	var_dump($str);
?>

HTML-Code: Ausgabe
string(31) "PHP-Sonderzeichen: '"$\ - Ende."


Das Escapen von Zeichen, die eigentlich nicht escapet werden müssen erzeugt keine Warnung. Es werden dann sowohl der Backslash als auch das escapete Zeichen ausgegeben.

PHP-Code
<?php
	$str = "Willkürliches Escapen: \p\'\m - Ende.";
	var_dump($str);
?>

HTML-Code: Ausgabe
string(38) "Willkürliches Escapen: \p\'\m - Ende."


4. Beliebiges ASCII-Zeichen anhand seiner Nummer zum String hinzufügen

Wer nach weiteren Sonderzeichen sucht, der kann problemlos sämtliche ASCII-Zeichen anhand der Funktion chr($dezimalwert) generieren. Es muss nur der Dezimalwert des Zeichens an die Funktion übergeben werden. Die Rückgabe ist ein String. So erzeugt beispielsweise chr(97) das Zeichen „a”:

PHP-Code
<?php
	// a = dezimal 97, A = dezimal 65

	$str1 = "a: \141, A: \101"; // oktal
	var_dump($str1);

	$str2 = "a: \x61, A: \x41"; // hex
	var_dump($str2);

	$str3 = "a: ".chr(97).", A: ".chr(65);
	var_dump($str3);
?>

HTML-Code: Ausgabe
string(10) "a: a, A: A"
string(10) "a: a, A: A"
string(10) "a: a, A: A"


Um unsere Webseite für Sie optimal zu gestalten und fortlaufend verbessern zu können, verwenden wir Cookies. Durch die weitere Nutzung der Webseite stimmen Sie der Verwendung von Cookies zu. Weitere Informationen zu Cookies erhalten Sie in unserer Datenschutzerklärung. OK