Start · Sprachen · PHP · Referenz · mb_ord

mb_ord

Funktion

Gibt den Unicode-Codepoint (als Integer) des ersten Zeichens eines Multibyte-Strings zurück.

seit PHP 7.2.0 Kategorie: string

Signatur

mb_ord(string $string, ?string $encoding = null): int|false

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

Typ
int|false
Beschreibung
Gibt den Unicode-Codepoint des ersten Zeichens als 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
65 65

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
128512 0x1F600 240

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
bool(true) bool(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;
8364 Identisch

// 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.