Lorsque vous traitez avec un codage de caractères multi -yte, PHP fournit la fonction iconv_strrpos pour trouver la dernière occurrence d'une sous-chaîne dans une chaîne. Cette fonction est particulièrement importante pour gérer le codage multi-octets telles que l'UTF-8, car les STRRPO conventionnels peuvent entraîner une mauvaise alimentation des calculs de position en raison des erreurs de segmentation des octets. Cependant, avec la mise à niveau des versions PHP, le comportement de ICONV_STRRPOS change également dans les détails, et la compréhension de ces différences est essentielle pour les développeurs afin d'éviter les problèmes de compatibilité potentiels.
L'utilisation iconv_strrpos est similaire à STRRPOS , et sa définition de fonction est la suivante:
int iconv_strrpos ( string $haystack , string $needle [, int $offset = 0 [, string $encoding = ini_get("iconv.internal_encoding") ]] )
$ Haystack : la chaîne à rechercher.
$ aiguille : la sous-chaîne à trouver.
$ Offset : Recherchez la position de départ (la valeur par défaut est 0, les nombres négatifs sont pris en charge).
$ Encoding : Encodage de chaîne, la valeur par défaut est prise à partir de iconv.internal_encoding .
La valeur de retour est la dernière position de caractère (en fonction des caractères, pas des octets) lorsque $ cela apparaît, et renvoie faux lorsqu'il ne peut être trouvé.
iconv_strrpos se comporte instable lors du traitement des paramètres de décalage $ . Les décalages négatifs ne fonctionnent parfois pas et peuvent même entraîner des rendements d'erreur.
Le codage par défaut dépend de iconv.internal_encoding . S'il n'est pas explicitement défini, il peut entraîner l'échec de la reconnaissance de l'encodage multi -yte.
Certains bogues font que la fonction renvoie une exception lorsque la longueur de l'aiguille $ est supérieure à 1.
La gestion de $ offset est plus précise, le support négatif des nombres est parfait et est cohérent avec la description du document.
Les paramètres de codage par défaut sont recommandés pour transmettre explicitement, réduire la dépendance à la configuration et éviter les différences en raison de différents environnements.
Résolution de l'écart de retour, des performances et des améliorations de la stabilité lorsque $ aigule Multibyte String correspond à la correspondance.
Avant certaines versions PHP 7.2, il y avait certains bogues de bord et il est recommandé de passer à PHP 7.3+ pour des performances plus fiables.
iconv_strrpos dépend des paramètres de codage corrects, sinon la longueur de chaîne sera mal jugée ou la correspondance échouera. Assurez-vous de passer $ encodant explicitement, il est recommandé d'écrire explicitement comme:
$pos = iconv_strrpos($str, $needle, 0, 'UTF-8');
$ offset est un indice basé sur des caractères, pas des octets.
Le décalage négatif indique le point de départ calculé à partir de la réciproque de la fin de la chaîne.
Les premières versions PHP avaient un mauvais support pour les décalages négatifs, vous devez donc faire attention à la compatibilité des versions lorsque vous les utilisez.
Renvoie la position du caractère (à partir de 0), la position non-octet.
Si FALSE n'est pas trouvé, et False et Integer 0 sont facilement confus lors du jugement, il est recommandé d'utiliser un jugement congruent:
if ($pos === false) {
echo "Aucune sous-chaîne trouvée";
} else {
echo "L'emplacement est: $pos";
}
Lorsque $ aigule contient des caractères multi -yte, PHP 7+ est plus précis dans le traitement. Évitez d'utiliser des fonctions de chaîne à un octet au lieu d' iconv_strrpos pour éviter les erreurs brouillées ou compensées.
<?php
// Hypothèses $str Inclus en chinois
$str = "Ceci est un test de chaîne de test";
// PHP 7+ Écriture recommandée,Clairement encodé
$needle = "test";
$pos = iconv_strrpos($str, $needle, 0, 'UTF-8');
if ($pos !== false) {
echo "La dernière fois qu'il apparaît, c'est: $pos\n";
} else {
echo "Aucune sous-chaîne trouvée\n";
}
Sortir:
La dernière fois qu'il apparaît, c'est: 8
Dans les anciennes versions, si aucun encodage n'est spécifié, une erreur ou une fausse peut être sortie.
ICONV_STRRPOS est une fonction indispensable dans le traitement de chaîne multi -yte, mais son comportement dépend de la version PHP et des paramètres de codage.
L'introduction des codages doit être explicitement transmise pendant le développement pour éviter de s'appuyer sur les configurations par défaut.
Pour le support de valeur de décalage $ négatif, assurez-vous d'utiliser PHP 7 ou plus.
Faites attention au jugement de type lorsque vous utilisez la valeur de retour pour éviter la confusion entre 0 et FALSE .
Il est recommandé d'effectuer des tests de compatibilité sur des fonctions connexes lors de la mise à niveau de la version PHP pour s'assurer que le programme est correctement exécuté.