Mbstring et PHP doivent être utilisés dans le développement d’applications Web

0

Les octets et les bits sont deux unités pour stocker des informations logiques. Un bit peut être considéré comme un trou, qui peut être rempli avec l'une des deux valeurs suivantes : 0 ou 1.

Un octet est un groupement de huit bits. En termes mathématiques, un octet est capable de représenter 256 valeurs différentes (28).

Pensons à une langue, disons l'anglais. Il comporte des caractères (a, b, c, … etc.) qui sont représentés dans un ordinateur par des octets. Le nombre total de caractères en anglais ne dépasse pas 256, de sorte que chaque caractère peut être représenté en utilisant une séquence différente de 8 bits.

Les chaînes sont simplement une collection de caractères. Normalement, en PHP, les opérations de chaîne fonctionnent sur des chaînes de caractères à un octet. Par exemple : vous pouvez comparer les chaînes "Bonjour" et "Salut". Avec strcmpr(), les deux chaînes seront comparées en supposant que chaque caractère de la chaîne prend un octet.

Mais pensez à une langue qui a plus de 256 caractères (par exemple le japonais), ou lorsque nous voulons représenter des caractères de plusieurs langues en même temps. Un octet de stockage pour chaque caractère n'est pas suffisant. C'est là qu'intervient le concept multi-octets.

Une chaîne de texte japonais peut amener la fonction strcmpr() à renvoyer une valeur incorrecte ou erronée, car l'hypothèse selon laquelle un octet représente un caractère n'est plus vraie. Lorsque nous travaillons avec des chaînes codées sur plusieurs octets, la manipulation de ces chaînes nécessite des fonctions spéciales plutôt que les fonctions courantes de chaîne à un octet. Pour gérer les chaînes multi-octets en PHP, mbstring fournit les fonctions de chaîne spécifiques à plusieurs octets.

Comprendre UTF-8

UTF signifie Unicode Transformation Format et est un système de codage qui vise à représenter chaque caractère dans chaque langue dans un jeu de caractères. Il existe différentes versions d'UTF, dont certaines sont présentées ci-dessous :

Format d'encodage La description
UTF-1 Compatible avec ISO-2022, obsolète de la norme Unicode.
UTF-7 Système de codage 7 bits, principalement utilisé dans les e-mails mais ne faisant pas partie de la norme Unicode.
UTF-8 Système d'encodage 8 bits, à largeur variable et compatible ASCII.
UTF-EBCDIC Système d'encodage 8 bits, à largeur variable et compatible EBCDIC.
UTF-16 Système d'encodage 16 bits, largeur variable.
UTF-32 Système d'encodage 32 bits, largeur fixe.

Nous nous retrouvons à utiliser UTF-8 la plupart du temps lorsque nous travaillons avec du texte multi-octets, alors concentrons-nous un instant sur cela. UTF-8 encode les caractères sur plusieurs octets en utilisant le schéma suivant :

Alors, comment sait-il si un caractère est stocké sur un octet ou sur plusieurs octets ? Pour cela, il regarde le bit de poids fort du premier octet.

Code Sens
0xxxxxxx Un code à un seul octet
110xxxxx Un octet de plus suit cet octet
1110xxxx Deux autres octets suivent cet octet
11110xxx Trois octets supplémentaires suivent cet octet
111110xx Quatre octets supplémentaires suivent cet octet
1111110x Cinq octets supplémentaires suivent cet octet
10xxxxxx Suite du caractère multi-octets

Chaque octet continu dans une séquence de plusieurs octets commence alors par 1 et 0 dans ses deux bits de poids fort pour fournir un moyen de détecter les données corrompues.

Équivalents multioctets des fonctions de chaîne courantes

Pour les fonctions de chaîne couramment utilisées, telles que strlen(), strops() et substr(), il existe des fonctions équivalentes multioctets. Vous devez utiliser les fonctions équivalentes lorsque vous travaillez avec des chaînes multioctets.

Tableau 4: Fonctions de chaîne multi-octets équivalentes à un seul octet

Octet unique Multioctet La description
strlen() mb_strlen() Obtenir la longueur de la chaîne
strpos() mb_strpos() Trouver la position de la première occurrence de chaîne dans une chaîne
substr() mb_substr() Renvoie une partie d'une chaîne
strtolow() mb_strtolow() Mettre une chaîne en minuscule
strtoupper() mb_strtoupper() Mettre une chaîne en majuscule
substr_count() mb_substr_count() Compter le nombre d'occurrences de sous-chaîne
diviser() mb_split() Fractionner la chaîne en tableau par expression régulière
courrier() mb_send_mail() Envoyer un courrier encodé
erg() mb_ereg() Correspondance d'expression régulière
fais() mb_regi() Correspondance d'expression régulière insensible à la casse
Permettez-moi de donner un exemple d'utilisation de la fonction multioctet :
  • Nom de la fonction: int mb_strlen (string $str [, string $encoding ] )

  • Description: Récupère la longueur de la chaîne.

  • Paramètres: str (chaîne d'entrée dont la longueur doit être déterminée)

    encodage (Encodage des caractères)

  • Valeur de retour : nombre de caractères de la chaîne d'entrée str avec l'encodage de caractères encoding

  • Type de retour: entier

Exemple de code: Voici un exemple de code d'utilisation de la fonction mb_strlen. Ici, la chaîne d'entrée est un mot chinois et trois options de codage de caractères différentes sont utilisées.

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

Contraintes: UTF-8 a quelques contraintes, comme-

  • Théoriquement, la longueur maximale des caractères encodés en UTF-8 est de six octets.
  • 0xFE et 0xFF ne sont jamais utilisés dans cet encodage.

Activer mbstring depuis php.ini :

  • Confirmez l'existence de php_mbstring.dll dans le dossier ext.
  • Décommentez ;extension=php_mbstring.dll de php.ini (c'est-à-dire extension=php_mbstring.dll)
  • Redémarrez le serveur.

Configuration d'exécution : pour activer certaines fonctions mbstring, certains paramètres supplémentaires doivent être modifiés.

Tableau 5: Configurations dans php.ini

Nom Valeur par défaut Option modifiable
mbstring.langue neutre PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.detect_order NUL PHP_INI_ALL
mbstring.http_input passer PHP_INI_ALL
mbstring.http_output passer PHP_INI_ALL
mbstring.internal_encoding NUL PHP_INI_ALL
mbstring.script_encoding NUL PHP_INI_ALL
mbstring.substitute_character NUL PHP_INI_ALL
mbstring.func_overload 0 PHP_INI_SYSTEM | PHP_INI_PERDIR
mbstring.encoding_translation 0 PHP_INI_SYSTEM | PHP_INI_PERDIR

Explication des options de configuration :

L'« option modifiable» détermine la valeur du mode modifiable. Il décrit comment et d'où les options mbstring peuvent être modifiées. Voici la signification des valeurs de mode :

Tableau 6 : Mode de changement différent

Mode Sens
PHP_INI_SYSTEM Nous pouvons définir l'entrée en utilisant php.ini ou httpd.conf
PHP_INI_PERDIR Nous pouvons définir l'entrée en utilisant php.ini, .htaccess, httpd.conf ou .user.ini
PHP_INI_ALL Nous pouvons définir l'entrée de n'importe où
PHP_INI_USER Nous pouvons définir l'entrée à l'aide du script utilisateur.

Comment changer de script utilisateur :

Nous pouvons utiliser le code suivant pour définir l'encodage interne de mbstring à partir du script utilisateur :

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

Comment changer depuis php.ini :

Nous pouvons éditer le fichier php.ini pour définir certaines options 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
Quelques problèmes liés à mbstring :

L'utilisation des fonctions mbstring peut parfois vous causer du harcèlement. Je vais discuter ici de certains problèmes liés à l'utilisation de la surcharge de fonctions multioctets. Pensons un scénario.

Vous avez activé l'option mbstring.func_overload dans votre fichier php.ini. Votre travail se passe bien. Vous surchargez la fonction de chaîne à un octet par des fonctions de chaîne à plusieurs octets. Mais que se passera-t-il si vous avez besoin d'une bibliothèque externe qui utilise fréquemment une fonction de chaîne ?

Il existe une solution à ce problème. Vous pouvez utiliser mbstring.internal_coding. Lorsque vous appelez une bibliothèque externe, elle utilisera un codage à un seul octet et lorsque vous reviendrez à votre projet, un codage multi-octets sera implémenté. Mais que se passe-t-il s'il y a un rappel entre votre projet et une bibliothèque externe ? Ça échoue ici.

Donc, vous devez garder à l'esprit ces problèmes lors de l'utilisation des options mbstring.

Importance de mbstring pour le développement Web :

Pour développer une application Web internationale, l'utilisation de mbstring est indispensable. Sinon, votre candidature sera limitée à certaines nations et langues. En tant que développeur, je vous propose d'acquérir des connaissances dans ce domaine et de vous rendre efficace en tant que programmeur web.

Source d'enregistrement: 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