Ricerca di una stringa multibyte in un'altra stringa multibyte
Domanda
Io uso questo codice per cercare una stringa UTF-8 in un'altra stringa UTF-8:
if (strlen(mb_stristr($string1, $string2)) > 0)
ma restituisce sempre 0! Qualcuno sa una soluzione migliore a questo problema? Entrambe le stringhe possono essere una combinazione di Unicode e non Unicode characteres!
Soluzione
Se non si utilizza la stringa, non utilizzare strstr
(o le sue derivitives). Tutto quello che interessa è che la stringa esistente, in modo da utilizzare mb_stripos
:
if (mb_stripos($string1, $string2) !== false) {
Altri suggerimenti
Perché non basta usare mb_stripos ?
Se non si conosce la codifica del sorgente (s) potrebbe essere necessario l'uso mb_detect_encoding e successivamente mb_convert_encoding per convertire ciascuna delle stringhe in una codifica comune, ma questo dovrebbe essere abbastanza banale.
Detto questo, è necessario verificare la presenza di falso nel caso in cui si verifica stringa2 alla partenza (cioè .: posizione zero) di string1.)
cioè .: Usa ...
if (mb_stripos($string1, $string2) !== false) {
// $string2 was found within $string1
...
}
if (mb_stristr($string1, $string2) !== false) echo "found $string2 in $string2";
Si noti il ??tipo di sicurezza !==
operatore di confronto.