Erreur : Warning: strpos() [function.strpos]: Offset n'est pas contenue dans la chaîne ne peut pas trouver de solution

Je sais, cette question a été posée, mais malheureusement, il n'existe pas de réponses sur la façon de résoudre ce problème.

Cela apparaît dans mes fichiers de log:

PHP message: PHP Warning: strpos(): Décalage qui n'est pas contenue dans la chaîne dans une ... sur la ligne 479

Malheureusement, je ne peux pas comprendre quelles sont les causes de ce problème et comment le résoudre. J'ai testé cette fonction plusieurs fois (avec de gros $texte, avec de courts $texte, $spam mots et sans $spam mots) mais je n'ai jamais eu cette erreur. Alors, quel genre de textes à mes utilisateurs de soumettre à l'origine de cette erreur?

    if (strposab($text, $spam, 1)) {
    echo "Email addresses and URLs not allowed here";
die;
    }

$spam = array('http','www','hotmail','yahoo','gmail','msn');


function strposab($haystack, $needles=array(), $offset=0) {
$chr = array();
foreach($needles as $needle) {
$res = strpos($haystack, $needle, $offset);
if ($res !== false) $chr[$needle] = $res;
}
if(empty($chr)) return false;
return min($chr);
} 

Deuxième question:

Pour certaines raisons, cette fonction ne filtre pas le premier mot de la chaîne.
Par exemple, dans cette chaîne de fonction ne trouve pas le mot "hotmail":

$text = 'hotmail test test test test';

mais dans cette chaîne, il trouve le mot "hotmail":

$text = 'test hotmail test test test test';
"notez Également que la chaîne de positions commencent à 0 et non pas 1.". Vous êtes de passage 1 au lieu de 0 que le décalage de départ, et que vos utilisateurs sont en soumettant une chaîne vide/caractère unique.

OriginalL'auteur user1406271 | 2013-04-27