この質問が寄せられていることは知っていますが、残念ながら、この問題を解決する方法はありません。
これは私のログファイルに表示されます:
PHP メッセージ: PHP 警告: strpos(): 479 行目の ... の文字列にオフセットが含まれていません
残念ながら、この問題の原因と修正方法がわかりません。この関数を何度もテストしました (大きな $text、短い $text、$spam 単語あり、$spam 単語なし) でしたが、このエラーは発生しませんでした。では、このエラーの原因となる、ユーザーが送信するテキストはどのようなものでしょうか?
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);
}
2 番目の質問:
何らかの理由で、この関数は文字列の最初の単語をフィルタリングしません。たとえば、次の文字列関数では、「hotmail」という単語は検出されません。
$text = 'hotmail test test test test';
しかし、この文字列には「hotmail」という単語が含まれています。
$text = 'test hotmail test test test test';