Signatur
Beschreibung
mb_chr() ist das Gegenstück zu mb_ord() und konvertiert einen numerischen Unicode-Codepoint in das entsprechende Zeichen. Damit lässt sich beispielsweise direkt aus einem bekannten Code-Point ein Zeichen erzeugen, ohne dass der Entwickler die tatsächliche Byte-Darstellung in der Zielkodierung kennen muss.
Der Parameter $encoding gibt die Ausgabekodierung an. Wird er weggelassen oder auf null gesetzt, verwendet die Funktion die interne Kodierung, die über mb_internal_encoding() gesetzt wurde. Typische Werte sind 'UTF-8', 'UTF-16BE' oder 'ISO-8859-1'.
Die Funktion eignet sich besonders bei der Verarbeitung von Texten aus verschiedenen Sprachräumen (z. B. CJK-Zeichen, Emoji, spezielle Sonderzeichen), wenn ein Zeichen anhand seines Unicode-Wertes generiert werden soll. In Kombination mit mb_ord() kann man zeichenweise Transformationen (z. B. einfache Caesar-Verschlüsselung für Unicode) umsetzen.
Liegt der $codepoint außerhalb des gültigen Bereichs für die gewählte Kodierung oder ist der Codepoint allgemein ungültig (negativ), gibt die Funktion false zurück.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $codepoint Pflicht | int | Der numerische Unicode-Codepoint (z. B. 65 für 'A', 128514 für 😂). Muss ein gültiger, nicht-negativer ganzzahliger Wert sein. |
|
| $encoding | ?string | null | Die Zeichenkodierung der Ausgabe, z. B. 'UTF-8' oder 'UTF-16BE'. Wird null oder kein Wert übergeben, wird die interne Kodierung (mb_internal_encoding()) verwendet. |
Rückgabewert
string zurück, der das dem Codepoint entsprechende Zeichen in der gewählten Kodierung enthält. Bei einem ungültigen Codepoint oder einer nicht unterstützten Kodierung wird false zurückgegeben.Beispiele
Einfaches ASCII-Zeichen erzeugen
<?php
// Codepoint 65 entspricht dem Zeichen 'A'
$zeichen = mb_chr(65, 'UTF-8');
echo $zeichen; // A
// Codepoint 97 entspricht 'a'
echo mb_chr(97, 'UTF-8'); // a
Unicode-Sonderzeichen und Emoji erzeugen
<?php
// Erzeugt das Euro-Zeichen €
echo mb_chr(0x20AC, 'UTF-8') . PHP_EOL;
// Erzeugt das Emoji 😂 (U+1F602)
echo mb_chr(0x1F602, 'UTF-8') . PHP_EOL;
// Erzeugt ein japanisches Schriftzeichen (U+65E5 = 日)
echo mb_chr(0x65E5, 'UTF-8') . PHP_EOL;
Zusammenspiel mit mb_ord (Zeichen verschieben)
<?php
// Einfache Verschiebechiffre für ASCII-Buchstaben mit mb_ord/mb_chr
$text = 'Hello';
$verschluesselt = '';
foreach (mb_str_split($text, 1, 'UTF-8') as $zeichen) {
$code = mb_ord($zeichen, 'UTF-8');
// Jeden Buchstaben um 1 verschieben
$verschluesselt .= mb_chr($code + 1, 'UTF-8');
}
echo $verschluesselt;
Ungültiger Codepoint – Fehlerbehandlung
<?php
// Negativer Codepoint ist ungültig
$result = mb_chr(-1, 'UTF-8');
if ($result === false) {
echo 'Ungültiger Codepoint übergeben.';
}
// Wichtig · Fallstricke
Kodierungskompatibilität: Nicht jeder Unicode-Codepoint kann in jeder Kodierung dargestellt werden. So lassen sich z. B. Emoji (Codepoints > U+FFFF) nicht in ISO-8859-1 kodieren – in diesem Fall gibt die Funktion false zurück. Für volle Unicode-Unterstützung sollte stets UTF-8 verwendet werden.
Rückgabe prüfen: Da die Funktion false zurückgeben kann, sollte der Rückgabewert mit === false geprüft werden, bevor er weiterverarbeitet wird. Ein einfaches if ($result) würde auch das Nullzeichen (\0, Codepoint 0) als falsch werten.
PHP-Version: mb_chr() ist erst ab PHP 7.2.0 verfügbar. In älteren PHP-Versionen kann json_decode('"\u'.sprintf('%04X', $codepoint).'"') als Notlösung für UTF-8-Ausgaben verwendet werden.