Die Funktionen chr() und ord() sind Gegenstücke: ord() ermittelt den ASCII-Wert eines Zeichens, chr() gibt das Zeichen zu einem ASCII-Wert zurück. Beide Funktionen sind nützlich für die Arbeit mit Zeichenkodierungen, Verschlüsselung und Zeichenmanipulation.
1. ord() – ASCII-Wert eines Zeichens ermitteln
Die Funktion ord() gibt den ASCII-Wert (0–255) des ersten Zeichens eines Strings zurück:
<?php
echo ord("A"); /* 65 */
echo ord("a"); /* 97 */
echo ord("0"); /* 48 */
echo ord(" "); /* 32 (Leerzeichen) */
echo ord("n"); /* 10 (Zeilenumbruch) */
?>
Syntax: int ord(string $character)
Hinweis: Bei einem längeren String wird nur das erste Zeichen ausgewertet. ord("Hallo") gibt 72 zurück (den Wert von "H").
2. chr() – Zeichen aus einem ASCII-Wert erzeugen
Die Funktion chr() ist das Gegenteil von ord(): Sie gibt das Zeichen zurück, das einem bestimmten Codepoint entspricht:
<?php
echo chr(65); /* A */
echo chr(97); /* a */
echo chr(48); /* 0 */
echo chr(10); /* Zeilenumbruch (n) */
echo chr(9); /* Tabulator (t) */
echo chr(182); /* ¶ */
?>
Syntax: string chr(int $codepoint)
Der Codepoint muss zwischen 0 und 255 liegen. Werte außerhalb dieses Bereichs werden mit 255 bitweise UND-verknüpft ($codepoint & 255).
3. Praktische Beispiele
Beispiel 1: Alle druckbaren ASCII-Zeichen ausgeben
<?php
for ($i = 32; $i <= 126; $i++) {
echo $i . " = " . chr($i) . " ";
}
/* 32 = 33 = ! 34 = " ... 65 = A 66 = B ... */
?>
Beispiel 2: Einfache Caesar-Verschiebung
<?php
function caesarVerschiebung(string $text, int $shift): string
{
$result = "";
for ($i = 0; $i < strlen($text); $i++) {
$ascii = ord($text[$i]);
/* Nur Großbuchstaben (65-90) verschieben */
if ($ascii >= 65 && $ascii <= 90) {
$result .= chr(($ascii - 65 + $shift) % 26 + 65);
/* Nur Kleinbuchstaben (97-122) verschieben */
} elseif ($ascii >= 97 && $ascii <= 122) {
$result .= chr(($ascii - 97 + $shift) % 26 + 97);
} else {
$result .= $text[$i];
}
}
return $result;
}
echo caesarVerschiebung("Hallo Welt", 3);
/* Ausgabe: Kdoor Zhow */
echo caesarVerschiebung("Kdoor Zhow", -3);
/* Ausgabe: Hallo Welt */
?>
Beispiel 3: Steuerzeichen erkennen
<?php
$text = "HallotWeltn";
for ($i = 0; $i < strlen($text); $i++) {
$code = ord($text[$i]);
if ($code < 32) {
echo "[Steuerzeichen: $code] ";
} else {
echo $text[$i];
}
}
/* Ausgabe: Hallo[Steuerzeichen: 9] Welt[Steuerzeichen: 10] */
?>
4. Wichtige ASCII-Werte
| Bereich | Codes | Zeichen |
| Ziffern | 48–57 | 0–9 |
| Großbuchstaben | 65–90 | A–Z |
| Kleinbuchstaben | 97–122 | a–z |
| Leerzeichen | 32 | (Space) |
| Tabulator | 9 | t |
| Zeilenumbruch | 10 | n |
| Wagenrücklauf | 13 | r |
5. Multibyte-Zeichen: mb_ord() und mb_chr()
Die Standardfunktionen ord() und chr() arbeiten byteweise und sind auf den Bereich 0–255 beschränkt. Für Unicode-Zeichen (z.B. Umlaute, Emojis) stehen seit PHP 7.2 die Multibyte-Varianten zur Verfügung:
<?php
/* Unicode-Codepoint eines Zeichens ermitteln */
echo mb_ord("ä", "UTF-8"); /* 228 */
echo mb_ord("€", "UTF-8"); /* 8364 */
/* Zeichen aus Unicode-Codepoint erzeugen */
echo mb_chr(228, "UTF-8"); /* ä */
echo mb_chr(8364, "UTF-8"); /* € */
?>
Zusammenfassung
| Funktion | Richtung | Bereich |
ord() | Zeichen → Zahl | 0–255 (Bytes) |
chr() | Zahl → Zeichen | 0–255 (Bytes) |
mb_ord() | Zeichen → Zahl | Unicode (ab PHP 7.2) |
mb_chr() | Zahl → Zeichen | Unicode (ab PHP 7.2) |