Start · Sprachen · PHP · Referenz · sapi_windows_cp_get

sapi_windows_cp_get

Funktion

Gibt die aktuell verwendete Windows-Codepage für die Konsolen-Ein-/Ausgabe oder ANSI zurück.

seit PHP 7.1.0 Kategorie: misc

Signatur

sapi_windows_cp_get(string $kind = ''): int

Beschreibung

sapi_windows_cp_get() ermittelt die aktive Codepage der Windows-Konsole (CMD/PowerShell), unter der das PHP-Skript läuft. Dies ist besonders relevant, wenn Zeichenketten zwischen verschiedenen Kodierungen konvertiert werden müssen, z. B. bei der Ausgabe von Sonderzeichen oder Umlauten in CLI-Anwendungen unter Windows.

Der Parameter kind steuert, welche Codepage abgefragt wird: Mit 'ansi' wird die ANSI-Codepage des Systems zurückgegeben (entspricht der Systemsprache), ohne Argument oder mit einem leeren String wird die aktuelle OEM-Codepage der Konsole zurückgegeben.

Typische Rückgabewerte sind beispielsweise 850 (DOS-Latin-1, Westeuropa), 65001 (UTF-8) oder 1252 (Windows-1252 / ANSI Western European). Diese Funktion ist ausschließlich auf Windows verfügbar und steht nur im CLI-SAPI sowie in verwandten SAPIs zur Verfügung.

Sie wird häufig zusammen mit sapi_windows_cp_set() und sapi_windows_cp_conv() eingesetzt, um Texte korrekt zu kodieren und auf der Windows-Konsole darzustellen.

Parameter

Name Typ Default Beschreibung
$kind string '' Art der abzufragenden Codepage. Mögliche Werte: 'ansi' für die ANSI-Systemcodepage oder ein leerer String (Standard) für die OEM-Konsolencodepage.

Rückgabewert

Typ
int
Beschreibung
Gibt die Nummer der aktuellen Codepage als Integer zurück, z. B. 65001 für UTF-8 oder 1252 für Windows-1252. Gibt 0 zurück, wenn die Codepage nicht ermittelt werden kann oder die Funktion auf einem Nicht-Windows-System aufgerufen wird.

Beispiele

Aktuelle OEM-Konsolencodepage ausgeben

<?php
// Gibt die aktuelle OEM-Codepage der Windows-Konsole aus
$codepage = sapi_windows_cp_get();
echo "Aktuelle Konsolencodepage: " . $codepage . PHP_EOL;
// Beispielausgabe unter deutschem Windows: 850
Aktuelle Konsolencodepage: 850

ANSI-Systemcodepage abfragen und Vergleich

<?php
// Abfrage der OEM- und der ANSI-Codepage
$oemCp   = sapi_windows_cp_get();
$ansiCp  = sapi_windows_cp_get('ansi');

echo "OEM-Codepage:  " . $oemCp  . PHP_EOL;
echo "ANSI-Codepage: " . $ansiCp . PHP_EOL;

if ($oemCp !== $ansiCp) {
    echo "OEM- und ANSI-Codepage unterscheiden sich – Konvertierung kann nötig sein." . PHP_EOL;
} else {
    echo "OEM- und ANSI-Codepage sind identisch." . PHP_EOL;
}
OEM-Codepage: 850 ANSI-Codepage: 1252 OEM- und ANSI-Codepage unterscheiden sich – Konvertierung kann nötig sein.

// Wichtig · Fallstricke

Plattformabhängigkeit: Diese Funktion ist ausschließlich unter Windows verfügbar und funktioniert nur im CLI-SAPI. Auf Linux/macOS oder unter einem Web-SAPI (Apache, FPM) liefert sie 0 und hat keine sinnvolle Wirkung.

Wenn Sonderzeichen oder Umlaute in der Windows-Konsole falsch dargestellt werden, sollte zunächst mit sapi_windows_cp_get() die aktive Codepage geprüft und anschließend entweder über sapi_windows_cp_set(65001) auf UTF-8 umgestellt oder mit sapi_windows_cp_conv() eine Zeichenkettenkonvertierung durchgeführt werden.