Maison >développement back-end >Problème PHP >Comment résoudre le problème de PHP + couper les caractères tronqués
Les caractères tronqués PHP sont dus au fait que les fonctions de chaîne en PHP ne sont pas sécurisées sur plusieurs octets par défaut. La solution consiste à encapsuler une fonction mb_trim pour résoudre les caractères tronqués.
L'environnement d'exploitation de cet article : système Windows 7, PHP version 7.4, ordinateur Dell G3.
Comment résoudre le problème tronqué de PHP+trim ?
Trim de PHP intercepte les caractères tronqués
J'utilise Trim pour filtrer les chaînes au début et à la fin. La description officielle de Trim :
trim - supprime les caractères vides (ou autres caractères) au début et à la fin. bout de la chaîne
J'en ai trouvé une aujourd'hui Question très étrange, le code est le suivant :
<?php $str = '研发、产品、'; echo trim($str, '、');
Devinez ce que cela va retourner ? « R&D, produits » ? NON, celui-ci revient étrangement à "R&D et production".
Se pourrait-il que ma méthode d'ouverture soit erronée. Pourquoi renvoie-t-elle des caractères tronqués ?
Après quelques tests, j'ai trouvé un problème très intéressant.
<?php echo trim('abacabb', 'ab'); //print 'c'
Au départ, je pensais que cela renverrait acabb, mais cela ne renverrait que c. Il s'agit d'une incompréhension de la fonction trim.
En fait, cet exemple est disponible dans la documentation officielle, mais je n'y ai pas prêté attention.
trim supprimera cycliquement les premiers caractères de la chaîne. Comme dans l'exemple ci-dessus, le processus d'exécution est le suivant :
La chaîne abacabb commencera à boucler à partir de l'indice 0. Si les caractères dans ab existent, ils seront supprimés lorsqu'il n'y aura plus de caractères dans ab.
Donc l'exécution est la suivante :
la boucle a existe dans la chaîne ab, supprimez-la, et le bacabb restant
la boucle b existe dans la chaîne ab, supprimez-la et le acabb restant
boucle a existe dans la chaîne ab , supprimez-le en laissant la boucle cabb
c n'existe pas dans la chaîne ab , arrêtez la boucle, donc supprimez le premier caractère et laissez : cabb.
Mais trim filtre le premier et le dernier caractères, il sera donc également supprimé de la fin dans une boucle.
La boucle b existe dans la chaîne ab, supprimez-la, et le cab restant est,
La boucle b existe dans la chaîne ab, supprimez-la, et le ca restant,
La boucle a existe dans la chaîne ab chaîne ab, supprimez-la, C restant,
la boucle c n'existe pas dans la chaîne ab, arrêtez la boucle, donc après avoir supprimé le caractère terminal, il nous reste : c.
Donc, une fois tout cela terminé, abacabb se retrouve avec c. Voyez ici, vous avez une certaine compréhension de la fonction de trim.
Bien, revenons au problème des codes tronqués. Pourquoi les codes tronqués sont-ils renvoyés ?
En effet, en PHP, les fonctions de chaîne ne sont pas sécurisées sur plusieurs octets par défaut. Si vous avez besoin d'une sécurité multi-octets, vous devez utiliser la série de fonctions mb_.
Le code hexadécimal de "," est 0xe3 0x80 0x81. Les fonctions qui ne sont pas sécurisées sur plusieurs octets le traiteront comme trois caractères.
Le code hexadécimal de "品" est 0xe5 0x93 0x81. Le dernier 0x81 ici correspond et est filtré. Cela conduira à des caractères tronqués.
ok, le problème est trouvé, trim n'a pas la fonction mb, mais on peut en encapsuler une nous-mêmes. Fonction mb_trim.
PS : J'utilise trim depuis longtemps, mais je n'ai jamais vraiment compris. Il est toujours important de lire la documentation officielle.
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!