Error : Warning: strpos() [function.strpos]: Offset not contained in string - can not find solution

php

Solution

To the first question:

Most likely at one point you're passing an empty string to your function. `Offset` in the `strpos` call indicates from which character it should start searching for `$needle`. It's 0-based, so if you want to start from the absolute beginning, you either set it to 0 or omit it (it defaults to 0.)

To the second question:

As mentioned before, the offset is 0-based, so if `$needle` you're searching for is exactly in the beginning of `$haystack`, it cannot be found if `$offset` is 1. With `$offset = 1` it would be as if you're searching in a string that looks like this: `'otmail test test test test'`.

One more thing:

I suggest you should use `stripos`, not `strpos` for your purposes, as it is case-insensitive and will also find words with uppercase letters, if it's something you might need.

Problem

I know, this question has been asked, but unfortunately, there are no answers how to solve this problem. This appears in my logfiles: PHP message: PHP Warning: strpos(): Offset not contained in string in ... on line 479 Unfortunately, I can not understand what causes this problem and how to fix it. I tested this function many times (with large $text, with short $text, with $spam words and without $spam words) but I never get this error. So, what kind of texts my users submit that cause this error? ``` 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); } ``` Second question: For some reason this function does not filter the first word of the string. For example in this string function does not find word "hotmail": ``` $text = 'hotmail test test test test'; ``` but in this string it finds word " hotmail": ``` $text = 'test hotmail test test test test'; ```

Original source