W3docs

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().

Avertissement

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ètreDescription
$strLa chaîne à convertir.
$fromUn seul caractère indiquant le jeu de caractères source.
$toUn 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 :

CodeJeu de caractères
kKOI8-R
wWindows-1251
iISO 8859-5
a / dx-cp866 (DOS)
mx-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 $from déclaré.
  • Son rôle est entièrement couvert par les fonctions génériques iconv() et mb_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().

Practice

Pratique
Que fait la fonction PHP 'iconv' telle que décrite dans l'article ?
Que fait la fonction PHP 'iconv' telle que décrite dans l'article ?
Was this page helpful?