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.
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:
| Parametro | Descrizione |
|---|---|
$str | La string da convertire. |
$from | Un singolo carattere che identifica il set di caratteri sorgente. |
$to | Un 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:
| Codice | Set di caratteri |
|---|---|
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;
?>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
$fromdichiarata. - Il suo compito è completamente coperto dalle funzioni di uso generale
iconv()emb_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().