W3docs

convert_cyr_string()

La funzione convert_cyr_string() convertiva stringhe tra set di caratteri cirillici. Deprecata in PHP 7.4, rimossa in PHP 8.0.

Attenzione

convert_cyr_string() è stata deprecata in PHP 7.4 e rimossa in PHP 8.0. È una funzione legacy che non dovrebbe essere utilizzata nel codice moderno. Per la conversione tra codifiche di caratteri, utilizza mb_convert_encoding() o iconv() — vedi la sezione di migrazione di seguito.

Questo capitolo spiega cosa faceva convert_cyr_string(), perché esisteva, perché è stata rimossa e cosa usare al suo posto. È materiale di riferimento per leggere o manutenere codice PHP vecchio — non una funzione da chiamare in qualcosa di nuovo.

What convert_cyr_string() did

La funzione convertiva una string da un set di caratteri cirillici a byte singolo a un altro. Prima che UTF-8 diventasse il valore predefinito, il testo cirillico veniva memorizzato in diversi sistemi di codifica a 8 bit incompatibili tra loro (Windows-1251, KOI8-R, ISO 8859-5, la pagina codici DOS 866 e un paio di set Mac/mainframe). convert_cyr_string() rimappava i byte da uno di quei set legacy a un altro.

Syntax

string convert_cyr_string ( string $str , string $from , string $to )

Accettava tre parametri e restituiva la string convertita:

ParametroDescrizione
$strLa string da convertire.
$fromUn singolo carattere che identifica il set di caratteri sorgente.
$toUn singolo carattere che identifica il set di caratteri di destinazione.

Gli argomenti $from e $to erano codici a lettera singola, non nomi completi di codifica:

CodiceSet di caratteri
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;
?>

Qui $str si assume contenga byte Windows-1251 grezzi ("w"), e la funzione li riscrive come byte KOI8-R ("k"). La cosa fondamentale da capire è che convert_cyr_string() operava su byte grezzi e presupponeva che la string sorgente fosse già nella codifica $from. Se le veniva passata una string UTF-8 (il valore predefinito moderno), l'output era spazzatura priva di senso (mojibake), perché i byte UTF-8 non corrispondono a nessun set cirillico legacy a byte singolo.

Why it was removed

  • Conosceva solo un elenco fisso di codifiche cirilliche legacy a 8 bit — UTF-8 non è mai stato supportato, quindi non poteva partecipare alla gestione moderna del testo basata su Unicode.
  • Corrompeva silenziosamente qualsiasi input che non fosse effettivamente nella codifica $from dichiarata.
  • Il suo compito è completamente coperto dalle funzioni di uso generale iconv() e mb_convert_encoding(), che supportano centinaia di codifiche incluso UTF-8.

Per questi motivi è stata deprecata in PHP 7.4 e rimossa in PHP 8.0. Chiamarla oggi genera un Error fatale.

What to use instead

Usa mb_convert_encoding() (dall'estensione mbstring) o iconv(). Entrambe accettano nomi di codifica reali e supportano 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");
?>

Convertire verso UTF-8 (piuttosto che tra due set legacy) è quasi sempre ciò che si vuole: una volta che il testo è in UTF-8 funziona ovunque in PHP moderno, nei database e nei browser.

Summary

convert_cyr_string() era un helper pre-Unicode per scambiare byte tra codifiche cirilliche legacy. È scomparsa da PHP 8.0 in poi. Se la incontri in vecchio codice, sostituisci ogni chiamata con iconv() o mb_convert_encoding() e migra i tuoi dati a UTF-8.

Per ulteriori informazioni sulla gestione del testo in PHP, vedi PHP Strings e htmlentities().

Practice

Pratica
Cosa fa la funzione PHP 'iconv' come descritto nell'articolo?
Cosa fa la funzione PHP 'iconv' come descritto nell'articolo?
Was this page helpful?