convert_cyr_string()
convert_cyr_string() était une fonction PHP pour convertir des chaînes entre jeux de caractères cyrilliques. Supprimée en PHP 8.0, remplacée par iconv().
convert_cyr_string() a été dépréciée en PHP 7.4 et supprimée en PHP 8.0. C'est une fonction héritée qui ne doit pas être utilisée dans du code moderne. Pour convertir entre des encodages de caractères, utilisez mb_convert_encoding() ou iconv() à la place — voir la section de migration ci-dessous.
Ce chapitre explique ce que faisait convert_cyr_string(), pourquoi elle existait, pourquoi elle a été supprimée et ce qui doit être utilisé à sa place. Il s'agit d'un document de référence pour lire ou maintenir du code PHP ancien — pas d'une fonction à appeler dans un nouveau projet.
What convert_cyr_string() did
La fonction convertissait une chaîne d'un jeu de caractères cyrilliques à un octet vers un autre. Avant que l'UTF-8 devienne le standard par défaut, le texte cyrillique était stocké dans plusieurs encodages 8 bits incompatibles (Windows-1251, KOI8-R, ISO 8859-5, la page de code DOS 866 et quelques jeux Mac/mainframe). convert_cyr_string() remappait les octets d'un de ces jeux hérités vers un autre.
Syntax
string convert_cyr_string ( string $str , string $from , string $to )Elle prenait trois paramètres et retournait la chaîne convertie :
| Paramètre | Description |
|---|---|
$str | La chaîne à convertir. |
$from | Un seul caractère indiquant le jeu de caractères source. |
$to | Un seul caractère indiquant le jeu de caractères cible. |
Les arguments $from et $to étaient des codes à une lettre, pas des noms d'encodage complets :
| Code | Jeu de caractères |
|---|---|
k | KOI8-R |
w | Windows-1251 |
i | ISO 8859-5 |
a / d | x-cp866 (DOS) |
m | x-mac-cyrillic |
Example
<?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;
?>Ici, $str est supposé contenir des octets Windows-1251 bruts ("w"), et la fonction les réécrit en octets KOI8-R ("k"). L'essentiel à comprendre est que convert_cyr_string() opérait sur des octets bruts et supposait que la chaîne source était déjà dans l'encodage $from. Si on lui passait une chaîne UTF-8 (le défaut moderne), la sortie était du charabia sans signification (mojibake), car les octets UTF-8 ne correspondent à aucun jeu cyrillique hérité à un octet.
Why it was removed
- Elle ne connaissait qu'une liste fixe d'encodages cyrilliques 8 bits hérités — l'UTF-8 n'était jamais pris en charge, elle ne pouvait donc pas participer à un traitement de texte moderne basé sur Unicode.
- Elle corrompait silencieusement toute entrée qui n'était pas réellement dans l'encodage
$fromdéclaré. - Son rôle est entièrement couvert par les fonctions génériques
iconv()etmb_convert_encoding(), qui prennent en charge des centaines d'encodages dont l'UTF-8.
Pour ces raisons, elle a été dépréciée en PHP 7.4 et supprimée en PHP 8.0. L'appeler aujourd'hui déclenche une Error fatale.
What to use instead
Utilisez mb_convert_encoding() (de l'extension mbstring) ou iconv(). Les deux prennent de vrais noms d'encodage et supportent tous deux l'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");
?>Convertir vers l'UTF-8 (plutôt qu'entre deux jeux hérités) est presque toujours ce que vous souhaitez : une fois le texte en UTF-8, il fonctionne partout dans PHP moderne, les bases de données et les navigateurs.
Summary
convert_cyr_string() était un utilitaire pré-Unicode pour échanger des octets entre des encodages cyrilliques hérités. Elle a été supprimée à partir de PHP 8.0. Si vous la rencontrez dans du vieux code, remplacez chaque appel par iconv() ou mb_convert_encoding() et migrez vos données vers l'UTF-8.
Pour en savoir plus sur la gestion du texte en PHP, voir PHP Strings et htmlentities().