Mbstring e PHP devono essere utilizzati nello sviluppo di applicazioni Web

0

Byte e bit sono due unità per la memorizzazione di informazioni logiche. Un bit può essere pensato come un buco, che può essere riempito con uno dei due valori: 0 o 1.

Un byte è un raggruppamento di otto bit. In termini matematici, un byte è in grado di rappresentare 256 valori diversi (28).

Pensiamo a una lingua, diciamo inglese. Ha alcuni caratteri (a, b, c, … ecc.) che sono rappresentati in un computer da byte. Il numero totale di caratteri in inglese non è superiore a 256, quindi ogni carattere può essere rappresentato utilizzando una diversa sequenza di 8 bit.

Le stringhe sono semplicemente una raccolta di caratteri. Normalmente in PHP le operazioni sulle stringhe operano su stringhe di caratteri a byte singolo. Ad esempio: potresti voler confrontare le stringhe "Ciao" e "Ciao". Con strcmpr(), le due stringhe verranno confrontate assumendo che ogni carattere nella stringa occupi un byte.

Ma pensa a una lingua che ha più di 256 caratteri (ad esempio il giapponese), o quando vogliamo rappresentare caratteri di più lingue contemporaneamente. L’archiviazione di un byte per ogni carattere non è sufficiente. È qui che entra in gioco il concetto multibyte.

Una stringa di testo giapponese può far sì che la funzione strcmpr() restituisca un valore errato o indesiderato poiché il presupposto che un byte rappresenta un carattere non è più vero. Quando lavoriamo con stringhe codificate in più byte, la manipolazione di queste stringhe richiede funzioni speciali piuttosto che le comuni funzioni di stringhe a byte singolo. Per gestire le stringhe multi byte in PHP, mbstring fornisce le funzioni di stringa specifiche multi byte.

Comprendere UTF-8

UTF è l’acronimo di Unicode Transformation Format ed è un sistema di codifica che mira a rappresentare ogni carattere in ogni lingua in un set di caratteri. Esistono diverse versioni di UTF, alcune delle quali sono mostrate di seguito:

Formato di codifica Descrizione
UTF-1 Compatibile con ISO-2022, obsoleto dallo standard Unicode.
UTF-7 Sistema di codifica a 7 bit, utilizzato principalmente nella posta elettronica ma non parte dello standard Unicode.
UTF-8 Sistema di codifica a 8 bit, larghezza variabile ed è compatibile con ASCII.
UTF-EBCDIC Sistema di codifica a 8 bit, larghezza variabile ed è compatibile con EBCDIC.
UTF-16 Sistema di codifica a 16 bit, larghezza variabile.
UTF-32 Sistema di codifica a 32 bit, larghezza fissa.

Ci ritroviamo a utilizzare UTF-8 la maggior parte delle volte quando lavoriamo con testo multibyte, quindi concentriamoci su questo per un momento. UTF-8 codifica i caratteri in più byte utilizzando il seguente schema:

Quindi, come fa a sapere se un carattere è memorizzato in un byte o in più byte? Per questo guarda al bit più significativo del primo byte.

Codice Significato
0xxxxxxx Un codice a byte singolo
110xxxxxx Un altro byte segue questo byte
1110xxxx Altri due byte seguono questo byte
11110xxx Altri tre byte seguono questo byte
111110xx Altri quattro byte seguono questo byte
1111110x Altri cinque byte seguono questo byte
10xxxxxx Continuazione del carattere multi byte

Ogni byte continuato in una sequenza a più byte inizia quindi con 1 e 0 nei suoi due bit di ordine più elevato per fornire un modo per rilevare i dati corrotti.

Equivalenti multibyte di funzioni di stringa comuni

Per le funzioni di stringa comunemente utilizzate, come strlen(), strops() e substr(), esistono funzioni equivalenti multibyte. Dovresti usare le funzioni equivalenti quando lavori con stringhe multibyte.

Tabella 4: Funzioni stringa multi byte equivalenti a un byte

Byte singolo Multibyte Descrizione
strlen() mb_strlen() Ottieni la lunghezza della stringa
strpos() mb_strpos() Trova la posizione della prima occorrenza di una stringa in una stringa
substr() mb_substr() Restituisce parte di una stringa
strtolower() mb_strtolower() Crea una stringa minuscola
strtoupper() mb_strtoupper() Rendi una stringa maiuscola
substr_count() mb_substr_count() Contare il numero di occorrenze di sottostringa
diviso() mb_split() Dividi la stringa in un array tramite un’espressione regolare
posta() mb_send_mail() Invia posta codificata
erg() mb_ereg() Corrispondenza di espressioni regolari
fare() mb_regi() Corrispondenza di espressioni regolari senza distinzione tra maiuscole e minuscole
Faccio un esempio di utilizzo della funzione multibyte:
  • Nome funzione: int mb_strlen (string $str [, string $encoding ] )

  • Descrizione: ottieni la lunghezza della stringa.

  • Parametri: str (stringa di input di cui deve essere determinata la lunghezza)

    codifica (codifica dei caratteri)

  • Valore restituito: numero di caratteri della stringa di input str con codifica della codifica dei caratteri

  • Tipo restituito: int

Codice di esempio: ecco un codice di esempio su come utilizzare la funzione mb_strlen. Qui la stringa di input è una parola cinese e vengono utilizzate tre diverse opzioni di codifica dei caratteri.

$ str ="大大";
echo mb_strlen ($ str, 'utf8' ).
echo mb_strlen ($ str, 'gbk' ).
echo mb_strlen ($ str, ' gb2312').

Vincoli: UTF-8 ha alcuni vincoli, come-

  • Teoricamente la lunghezza massima dei caratteri con codifica UTF-8 è di sei byte.
  • 0xFE e 0xFF non vengono mai utilizzati in questa codifica.

Abilita mbstring da php.ini :

  • Conferma l’esistenza di php_mbstring.dll nella cartella ext.
  • Rimuovere il commento da ;extension=php_mbstring.dll da php.ini (es. extension=php_mbstring.dll)
  • Riavvia il server.

Configurazione di runtime: per abilitare alcune funzioni mbstring, è necessario modificare alcune altre impostazioni.

Tabella 5: Configurazioni in php.ini

Nome Valore di default Opzione modificabile
mbstring.language neutro PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order NULLO PHP_INI_ALL
mbstring.http_input passaggio PHP_INI_ALL
mbstring.http_output passaggio PHP_INI_ALL
mbstring.internal_encoding NULLO PHP_INI_ALL
mbstring.script_encoding NULLO PHP_INI_ALL
mbstring.substitute_character NULLO PHP_INI_ALL
mbstring.func_overload 0 PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.encoding_translation 0 PHP_INI_SYSTEM | PHP_INI_PERDIR

Spiegazione delle opzioni di configurazione:

L’opzione “Modificabile" determina il valore della modalità modificabile. Descrive come e da dove è possibile modificare le opzioni di mbstring. Ecco il significato dei valori della modalità:

Tabella 6: Diverse modalità di cambio

Modalità Significato
SISTEMA_INI_PHP Possiamo impostare la voce usando php.ini o httpd.conf
PHP_INI_PERDIR Possiamo impostare la voce usando php.ini, .htaccess, httpd.conf o .user.ini
PHP_INI_ALL Possiamo impostare la voce da qualsiasi luogo
PHP_INI_USER Possiamo impostare la voce utilizzando lo script utente.

Come cambiare dallo script utente:

Possiamo usare il seguente codice per impostare la codifica interna di mbstring dallo script utente:

<?php
ini_set('mbstring.internal_encoding', 'UTF-8');
?>

Come cambiare da php.ini:

Possiamo modificare il file php.ini per impostare alcune opzioni mbstring.

; Set default language
mbstring.language = Neutral; Set default language to Neutral(UTF-8) (default)
mbstring.language = English; Set default language to English
 
; Enabled HTTP input encoding translation.
mbstring.encoding_translation = On
 
 
; Set default HTTP input character encoding
 
mbstring.http_input = pass ; No conversion.
mbstring.http_input = auto ; Set HTTP input to auto
Alcuni problemi relativi a mbstring:

L’uso delle funzioni mbstring a volte può causare molestie. Discuterò qui alcuni problemi relativi all’utilizzo dell’overload di funzioni multibyte. Pensiamo uno scenario.

Hai abilitato l’opzione mbstring.func_overload nel tuo file php.ini. Il tuo lavoro sta andando bene. Stai sovraccaricando la funzione di stringa a byte singolo con funzioni di stringa a più byte. Ma cosa succederà se hai bisogno di una libreria esterna che utilizza frequentemente alcune funzioni di stringa?

C’è una soluzione a questo problema. Puoi usare mbstring.internal_coding. Quando chiami una libreria esterna, utilizzerà la codifica a byte singolo e quando torni al tuo progetto, verrà implementata la codifica multibyte. Ma cosa succede se c’è una richiamata tra il tuo progetto e la libreria esterna? Qui fallisce.

Quindi, devi tenere a mente questi problemi mentre usi le opzioni mbstring.

Importanza di mbstring per lo sviluppo web:

Per sviluppare qualsiasi applicazione web internazionale, l’uso di mbstring è un must. Altrimenti la tua domanda sarà limitata ad alcune nazioni e lingue. Come sviluppatore, ti suggerisco di acquisire una certa conoscenza di questo dominio e di renderti efficiente come programmatore web.

Fonte di registrazione: instantshift.com

This website uses cookies to improve your experience. We'll assume you're ok with this, but you can opt-out if you wish. Accept Read More