convert_cyr_string()
Die Funktion convert_cyr_string() konvertiert einen string von einem kyrillischen Zeichensatz in einen anderen. Sie wurde in PHP 8.0 entfernt.
convert_cyr_string() wurde in PHP 7.4 als veraltet markiert und in PHP 8.0 entfernt. Es handelt sich um eine veraltete Funktion, die in modernem Code nicht mehr verwendet werden sollte. Zur Konvertierung zwischen Zeichenkodierungen verwenden Sie stattdessen mb_convert_encoding() oder iconv() — siehe den Abschnitt Migration weiter unten.
Dieses Kapitel erklärt, was convert_cyr_string() tat, warum sie existierte, warum sie entfernt wurde und was stattdessen zu verwenden ist. Es handelt sich um Referenzmaterial zum Lesen oder Pflegen von altem PHP-Code — keine Funktion, die Sie in neuen Projekten aufrufen sollten.
Was convert_cyr_string() tat
Die Funktion konvertierte einen string von einem Single-Byte-kyrillischen Zeichensatz in einen anderen. Bevor UTF-8 zum Standard wurde, wurde kyrillischer Text in mehreren inkompatiblen 8-Bit-Kodierungen gespeichert (Windows-1251, KOI8-R, ISO 8859-5, DOS-Codepage 866 sowie einige Mac- und Mainframe-Zeichensätze). convert_cyr_string() ordnete die Bytes von einem dieser älteren Zeichensätze einem anderen neu zu.
Syntax
string convert_cyr_string ( string $str , string $from , string $to )Die Funktion nahm drei Parameter entgegen und gab den konvertierten string zurück:
| Parameter | Beschreibung |
|---|---|
$str | Der zu konvertierende string. |
$from | Ein einzelnes Zeichen, das den Quellzeichensatz benennt. |
$to | Ein einzelnes Zeichen, das den Zielzeichensatz benennt. |
Die Argumente $from und $to waren einbuchstabige Codes, keine vollständigen Kodierungsnamen:
| Code | Zeichensatz |
|---|---|
k | KOI8-R |
w | Windows-1251 |
i | ISO 8859-5 |
a / d | x-cp866 (DOS) |
m | x-mac-cyrillic |
Beispiel
<?php
// Legacy code only — this throws a fatal error on PHP 8+.
$converted = convert_cyr_string($str, "w", "k"); // Windows-1251 -> KOI8-R
echo $converted;
?>Hier wird angenommen, dass $str rohe Windows-1251-Bytes enthält ("w"), und die Funktion schreibt diese als KOI8-R-Bytes um ("k"). Das Wesentliche dabei ist, dass convert_cyr_string() auf rohen Bytes arbeitete und voraussetzte, dass der Quell-string bereits in der $from-Kodierung vorlag. Wenn Sie ihr einen UTF-8-string übergaben (den modernen Standard), war die Ausgabe bedeutungsloser Zeichensalat (Mojibake), da UTF-8-Bytes keinem einzelnen kyrillischen Legacy-Zeichensatz entsprechen.
Warum sie entfernt wurde
- Sie kannte nur eine feste Liste veralteter 8-Bit-kyrillischer Kodierungen — UTF-8 wurde nie unterstützt, sodass sie nicht an der modernen, Unicode-basierten Textverarbeitung teilnehmen konnte.
- Sie hat jede Eingabe, die nicht tatsächlich in der angegebenen
$from-Kodierung vorlag, stillschweigend verfälscht. - Ihre Aufgabe wird vollständig von den Allzweckfunktionen
iconv()undmb_convert_encoding()übernommen, die Hunderte von Kodierungen einschließlich UTF-8 unterstützen.
Aus diesen Gründen wurde sie in PHP 7.4 als veraltet markiert und in PHP 8.0 entfernt. Ein Aufruf heute erzeugt einen fatalen Error.
Was stattdessen zu verwenden ist
Verwenden Sie mb_convert_encoding() (aus der mbstring-Erweiterung) oder iconv(). Beide akzeptieren echte Kodierungsnamen und beide unterstützen UTF-8:
<?php
// Convert Windows-1251 bytes to UTF-8.
$utf8 = mb_convert_encoding($legacy, "UTF-8", "Windows-1251");
// The same thing with iconv().
$utf8 = iconv("Windows-1251", "UTF-8", $legacy);
// Convert KOI8-R to UTF-8.
$utf8 = mb_convert_encoding($legacy, "UTF-8", "KOI8-R");
?>Die Konvertierung nach UTF-8 (statt zwischen zwei Legacy-Zeichensätzen) ist fast immer das, was Sie benötigen: Sobald Text in UTF-8 vorliegt, funktioniert er überall in modernem PHP, in Datenbanken und in Browsern.
Zusammenfassung
convert_cyr_string() war ein Vor-Unicode-Hilfsmittel zum Austauschen von Bytes zwischen veralteten kyrillischen Kodierungen. Es ist ab PHP 8.0 nicht mehr vorhanden. Wenn Sie es in altem Code vorfinden, ersetzen Sie jeden Aufruf durch iconv() oder mb_convert_encoding() und migrieren Sie Ihre Daten zu UTF-8.
Weitere Informationen zur Arbeit mit Text in PHP finden Sie unter PHP Strings und htmlentities().