Wiem, to pytanie zostało zadane, ale niestety, nie ma odpowiedzi, jak rozwiązać ten problem.Błąd: Ostrzeżenie: strpos() [function.strpos]: Przesunięcie nie zawarte w łańcuchu - nie można znaleźć rozwiązania
ten pojawia się w moich logów:
PHP wiadomość: PHP Warning: strpos(): Offset nie zawarte w ciąg w ... on line 479
Niestety, nie mogę zrozumieć, co powoduje ten problem i jak go naprawić. Testowałem tę funkcję wiele razy (z dużym tekstem $, krótkim tekstem $, słowami $ spam i bez słów $ spam), ale nigdy nie dostaję tego błędu. A więc, jakiego rodzaju teksty przesyłają moi użytkownicy, powodując ten błąd?
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);
}
Drugie pytanie:
Z jakiegoś powodu ta funkcja nie filtruje pierwsze słowo łańcucha. Na przykład w tej funkcji ciąg nie znajdzie słowo "hotmail":
$text = 'hotmail test test test test';
ale w tym ciągu znajdzie słowo "hotmail":
$text = 'test hotmail test test test test';
[ "* Należy również pamiętać, zaczynaj pozycji smyczkowych na 0, a nie 1 . * "] (http://us.php.net/strpos#refsect1-function.strpos-returnvalues). Przepisujesz "1" zamiast "0" jako offset początkowy, a Twoi użytkownicy przesyłają pusty ciąg/pojedynczy znak. – DCoder