Signatur
Beschreibung
mb_ord() ist das Multibyte-Äquivalent der Funktion ord() und liefert den Unicode-Codepoint des ersten Zeichens im übergebenen String. Im Gegensatz zu ord(), das nur den Bytewert des ersten Bytes zurückgibt, versteht mb_ord() Multibyte-Encodings wie UTF-8 und liefert den tatsächlichen Unicode-Codepoint – also z. B. 128512 für das Emoji 😀.
Der optionale Parameter $encoding bestimmt, in welcher Zeichenkodierung der String interpretiert wird. Wird er weggelassen oder auf null gesetzt, verwendet die Funktion die aktuell eingestellte interne Multibyte-Kodierung (konfigurierbar über mb_internal_encoding()).
Typische Anwendungsfälle sind die Analyse von Zeichen in internationalisierten Texten, Validierungen (z. B. ob ein Zeichen in einem bestimmten Unicode-Block liegt) sowie die Umwandlung von Zeichen in ihre numerischen Codepoint-Darstellungen zur Weiterverarbeitung.
Zusammen mit mb_chr(), dem inversen Pendant, lassen sich Zeichen und ihre Codepoints verlustfrei ineinander umwandeln.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $string Pflicht | string | Der Eingabe-String. Der Unicode-Codepoint des ersten Zeichens dieses Strings wird zurückgegeben. Ist der String leer, gibt die Funktion false zurück. |
|
| $encoding | ?string | null | Die Zeichenkodierung des Eingabe-Strings, z. B. 'UTF-8' oder 'ISO-8859-1'. Wird null übergeben oder der Parameter weggelassen, wird die interne Kodierung (eingestellt via mb_internal_encoding()) verwendet. |
Rückgabewert
int zurück. Gibt false zurück, wenn der String leer ist oder die Kodierung ungültig ist.Beispiele
Codepoint eines ASCII-Zeichens ermitteln
<?php
// ASCII-Zeichen 'A' hat den Codepoint 65
$codepoint = mb_ord('A', 'UTF-8');
echo $codepoint; // 65
// Vergleich mit ord()
echo ord('A'); // 65 — bei reinem ASCII identisch
Codepoint eines Multibyte-Zeichens (Emoji) ermitteln
<?php
// Emoji 😀 hat den Unicode-Codepoint U+1F600
$emoji = '😀';
$codepoint = mb_ord($emoji, 'UTF-8');
echo $codepoint . PHP_EOL; // 128512
echo '0x' . strtoupper(dechex($codepoint)); // 0x1F600
// ord() würde nur das erste Byte zurückliefern (falsch für Multibyte)
echo ord($emoji); // 240 — nur das erste Byte von UTF-8
Unicode-Block-Prüfung (Kyrillisch)
<?php
// Prüfen, ob ein Zeichen im kyrillischen Unicode-Block liegt (U+0400–U+04FF)
function isKyrillic(string $char): bool {
$cp = mb_ord($char, 'UTF-8');
return $cp !== false && $cp >= 0x0400 && $cp <= 0x04FF;
}
var_dump(isKyrillic('Д')); // true
var_dump(isKyrillic('A')); // false
Zusammenspiel mit mb_chr (Roundtrip)
<?php
$original = '€';
$codepoint = mb_ord($original, 'UTF-8');
$reconstructed = mb_chr($codepoint, 'UTF-8');
echo $codepoint . PHP_EOL; // 8364
echo ($original === $reconstructed ? 'Identisch' : 'Unterschiedlich') . PHP_EOL;
// Wichtig · Fallstricke
Leerer String: Wird ein leerer String übergeben, gibt mb_ord() false zurück. Da false in manchen Kontexten als 0 gewertet wird, sollte mit striktem Vergleich (=== false) geprüft werden.
Nur das erste Zeichen: mb_ord() wertet ausschließlich das erste Zeichen des Strings aus. Bei längeren Strings müssen die einzelnen Zeichen z. B. mit einer Schleife über mb_substr() extrahiert werden.
Encoding-Mismatch: Stimmt die angegebene Kodierung nicht mit der tatsächlichen Byte-Sequenz überein, können falsche oder undefinierte Codepoints zurückgegeben werden. Im Zweifelsfall UTF-8 explizit angeben.