Signatur
Beschreibung
bind_textdomain_codeset() ist Teil der PHP-Gettext-Unterstützung und legt fest, in welchem Zeichensatz die übersetzten Zeichenketten zurückgegeben werden, die über gettext(), dgettext() oder ngettext() aus einer bestimmten Übersetzungsdomain abgerufen werden. Standardmäßig wird das Codeset der aktuellen Locale verwendet, was in manchen Umgebungen nicht UTF-8 ist.
Ein typischer Anwendungsfall ist eine Webanwendung, die ausschließlich UTF-8 verwendet: Hier sollte bind_textdomain_codeset('meine_domain', 'UTF-8') aufgerufen werden, damit alle übersetzten Texte als UTF-8 geliefert werden – unabhängig davon, in welchem Encoding die .po-/.mo-Dateien auf dem System gespeichert sind.
Wird null als $codeset übergeben (ab PHP 8.0 explizit erlaubt), wird kein neues Codeset gesetzt und die Funktion gibt das aktuell gebundene Codeset zurück, ohne es zu ändern.
Die Funktion setzt eine PHP-Installation mit aktivierter Gettext-Erweiterung (--with-gettext) voraus und ist eng verzahnt mit bindtextdomain() und textdomain(), die ebenfalls vor der ersten Übersetzungsabfrage aufgerufen werden sollten.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $domain Pflicht | string | Der Name der Gettext-Domain (entspricht dem Dateinamen der .mo-Datei ohne Erweiterung), für die das Codeset gesetzt werden soll. |
|
| $codeset Pflicht | ?string | Der gewünschte Zeichensatz, z. B. 'UTF-8' oder 'ISO-8859-1'. Wird null übergeben, wird das Codeset nicht geändert und die Funktion gibt nur den aktuellen Wert zurück. |
Rückgabewert
string zurück. Gibt false zurück, wenn die Gettext-Erweiterung nicht verfügbar ist oder ein Fehler aufgetreten ist.Beispiele
Zeichensatz für eine Gettext-Domain auf UTF-8 setzen
<?php
// Lokalisierungseinstellungen initialisieren
putenv('LANG=de_DE.UTF-8');
setlocale(LC_ALL, 'de_DE.UTF-8');
// Pfad zu den Übersetzungsdateien binden
bindtextdomain('messages', __DIR__ . '/locale');
// Sicherstellen, dass Übersetzungen in UTF-8 geliefert werden
$codeset = bind_textdomain_codeset('messages', 'UTF-8');
echo 'Codeset: ' . $codeset . PHP_EOL;
// Aktive Domain setzen
textdomain('messages');
// Übersetzung abrufen — wird nun als UTF-8 zurückgegeben
echo gettext('Hello World');
Aktuelles Codeset einer Domain abfragen (ohne Änderung)
<?php
// Domain initialisieren
bindtextdomain('shop', __DIR__ . '/locale');
bind_textdomain_codeset('shop', 'UTF-8');
// Codeset nur abfragen, nicht ändern (null übergeben)
$current = bind_textdomain_codeset('shop', null);
echo 'Aktuelles Codeset: ' . $current;
// Wichtig · Fallstricke
Erweiterung erforderlich: bind_textdomain_codeset() steht nur zur Verfügung, wenn PHP mit Gettext-Unterstützung kompiliert wurde (--with-gettext). Fehlt diese Erweiterung, ist die Funktion nicht definiert und führt zu einem fatalen Fehler.
Reihenfolge beachten: Die Funktion sollte zusammen mit bindtextdomain() und textdomain() aufgerufen werden, bevor die erste Übersetzung abgerufen wird. Eine spätere Änderung des Codesets kann zu inkonsistenten Ausgaben führen, wenn Übersetzungen gecacht werden.
Null-Parameter: Das Übergeben von null als $codeset zur reinen Abfrage ist erst seit PHP 8.0 offiziell dokumentiert; in älteren Versionen sollte stattdessen das Codeset explizit neu gesetzt werden.