Recherchez un chaîne multi-octets dans une autre chaîne de caractères multi-octets

StackOverflow https://stackoverflow.com/questions/4429332

  •  09-10-2019
  •  | 
  •  

Question

J'utilise ce code pour rechercher une chaîne utf-8 dans une autre chaîne de utf-8:

if (strlen(mb_stristr($string1, $string2)) > 0)

mais il retourne toujours 0! Quelqu'un sait-il une meilleure solution à ce problème? Les deux chaînes peuvent être une combinaison de unicode et caracteres non-unicode!

Était-ce utile?

La solution

Si vous ne l'utilisez la sous-chaîne, ne pas utiliser strstr (ou ses derivitives). Tout ce que vous aimez est sur le point que la chaîne existe, utilisez donc mb_stripos :

if (mb_stripos($string1, $string2) !== false) {

Autres conseils

Pourquoi ne pas simplement utiliser mb_stripos ?

Si vous ne connaissez pas le codage source (s), vous devrez peut-être utiliser mb_detect_encoding puis mb_convert_encoding pour convertir chacune des chaînes en un codage commun, mais cela devrait être assez trivial.

Cela dit, vous devez vérifier pour faux dans le cas chaine2 se produit au début (i.e. .: position zéro) de chaine1.)

i.e. .: Utilisation ...

if (mb_stripos($string1, $string2) !== false) {
    // $string2 was found within $string1
    ...
}
if (mb_stristr($string1, $string2) !== false) echo "found $string2 in $string2";

Notez l'opérateur de comparaison SÛR type !==.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top