2010-12-13 3 views
0

J'utilise ce code pour rechercher une chaîne utf-8 dans une autre chaîne utf-8:Rechercher une chaîne multi-octets dans une autre chaîne de caractères multi-octets

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

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

+0

Je présume que vous avez juste besoin de savoir si oui ou non la chaîne se produit dans l'autre chaîne, ou? –

+1

Missing s dans le nom de la deuxième variable. – rik

+0

Oui, c'est vrai! Je veux juste vérifier si une chaîne existe dans une autre chaîne ou pas ... –

Répondre

1

Si vous n'utilisez pas la sous-chaîne, n'utilisez pas strstr (ou ses dérivés). Tout ce que vous aimez est que la chaîne existe, donc utilisez mb_stripos:

if (mb_stripos($string1, $string2) !== false) { 
0
if (mb_stristr($string1, $string2) !== false) echo "found $string2 in $string2"; 

Notez l'opérateur de comparaison de type sécurisé !==.

3

Pourquoi ne pas simplement utiliser mb_stripos? Si vous ne connaissez pas le (s) codage (s) source, 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 plutôt trivial.

Cela dit, vous devez vérifier pour faux en cas chaine2 se produit au début (ie: position zéro). De chaine1)

à savoir: utiliser ...

if (mb_stripos($string1, $string2) !== false) { 
    // $string2 was found within $string1 
    ... 
} 
+0

! == faux fait trick .. merci – Alper

Questions connexes