La chaîne php est composée d'une série de caractères, où chaque caractère équivaut à un octet, ce qui signifie que PHP ne peut prendre en charge que 256 jeux de caractères, donc Unicode n'est pas pris en charge dans PHP. Un tableau d'octets plus ; un entier spécifiant la longueur du tampon.
L'environnement d'exploitation de ce tutoriel : système Windows 10, PHP version 8.1, ordinateur DELL G3
De quoi est constituée une chaîne php ?
Une chaîne de caractères est composée d'une série de caractères, où chaque caractère équivaut à un octet. Cela signifie que PHP ne peut prendre en charge qu'un jeu de caractères de 256 et ne prend donc pas en charge Unicode.
Explication détaillée du type de chaîne
L'implémentation d'une chaîne en PHP est un tableau d'octets plus un entier indiquant la longueur du tampon. Il n'y a aucune information sur la façon de convertir les octets en caractères, c'est au programmeur de décider. Il n'y a aucune restriction sur les valeurs dont est composée une chaîne ; en particulier, les octets dont la valeur est 0 ("octets NUL") peuvent être n'importe où dans la chaîne (bien qu'il existe plusieurs fonctions, appelées dans ce manuel comme non binaires). "Safe", peut ignorer toutes les données après les octets NUL).
Cette fonctionnalité du type chaîne explique pourquoi il n'y a pas de type "octet" séparé en PHP - des chaînes ont été utilisées à la place. Les fonctions qui renvoient des valeurs non textuelles - telles que des données arbitraires lues à partir d'une socket réseau - renverront toujours des chaînes.
Puisque PHP ne précise pas l'encodage de la chaîne, comment la chaîne est-elle encodée ? Par exemple, la chaîne "á" est-elle égale à "xE1" (ISO-8859-1), "xC3xA1" (UTF-8, forme C), "x61xCCx81" (UTF-8, forme D) ou toute autre expression possible ? La réponse est que la chaîne sera codée dans le même codage que le fichier script. Ainsi, si un script est codé en ISO-8859-1, les chaînes qu'il contient seront également codées en ISO-8859-1, et ainsi de suite. Cependant, cela ne s'applique pas lorsque Zend Multibyte est activé ; dans ce cas, le script peut être encodé de n'importe quelle manière (soit explicitement spécifié, soit automatiquement détecté) puis converti en un certain encodage interne, et la chaîne sera encodée de cette manière. Notez qu'il existe certaines contraintes sur l'encodage du script (ou son encodage interne si Zend Multibyte est activé) - cela signifie que cet encodage doit être un sur-ensemble compatible d'ASCII, tel que UTF-8 ou ISO-8859-1. Sachez cependant que les codages dépendants de l'état dans lesquels la même valeur d'octet peut être utilisée pour les caractères initiaux et non initiaux peuvent entraîner des problèmes lors du changement d'état.
Bien sûr, pour être utiles, les fonctions qui opèrent sur du texte doivent faire des hypothèses sur la façon dont la chaîne est codée. Malheureusement, il existe de nombreuses variantes de fonctions PHP pour cela :
Certaines fonctions supposent que la chaîne est codée en octets simples, mais n'exigent pas que les octets soient interprétés comme des caractères spécifiques. Par exemple substr(), strpos(), strlen() et strcmp(). Une autre façon de considérer ces fonctions est qu'elles fonctionnent sur des tampons de mémoire, c'est-à-dire en termes d'octets et d'indices d'octets.
Certaines fonctions reçoivent la méthode d'encodage de la chaîne et peuvent également supposer qu'il n'y a pas de telles informations par défaut. Les exemples incluent htmlentities() et la plupart des fonctions de l'extension mbstring.
D'autres fonctions utilisent la locale actuelle (voir setlocale()), mais fonctionnent octet par octet.
Enfin, certaines fonctions supposeront que la chaîne est dans un encodage spécifique, généralement UTF-8. Cela est vrai pour la plupart des fonctions de l'extension intl et de l'extension PCRE (dans l'exemple ci-dessus uniquement lorsque le modificateur u est utilisé).
Enfin, écrire des programmes qui utilisent correctement Unicode nécessite de veiller à éviter les fonctions susceptibles de corrompre les données. Pour utiliser les fonctions des extensions intl et mbstring. Mais utiliser des fonctions capables de gérer les encodages Unicode n’est qu’un début. Quelles que soient les fonctions fournies par n'importe quel langage, le plus fondamental est de comprendre la spécification Unicode. Par exemple, un programme qui suppose uniquement des caractères majuscules et minuscules serait complètement faux.
Apprentissage recommandé : "Tutoriel vidéo PHP"
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!