ローカルのUTF-8エンコードファイルに保存されているキーワードのリストを使用する不適切な単語フィルターがあります。このファイルには、ラテン語と非ラテン語の両方の文字(主に英語とアラビア語)が含まれています。ラテン語のキーワードではすべてが期待どおりに機能しますが、変数に非ラテン語の文字が含まれている場合、マッチングではこれらの既存のキーワードが認識されないようです。
ラテン語と非ラテン語の両方のキーワードを一致させるにはどうすればよいですか。
この例のように、badwords.txtファイルには1行に1つの単語が含まれています
bad
nasty
racist
سفالة
وساخة
جنس
マッチングに使用されるコード:
$badwords = file_get_contents("badwords.txt");
$badtemp = explode("\n", $badwords);
$badwords = array_unique($badtemp);
$hasBadword = 0;
$query = strtolower($query);
foreach ($badwords as $key => $val) {
if (!empty($val)) {
$val = trim($val);
$regexp = "/\b" . $val . "\b/i";
if (preg_match($regexp, $query))
$badFlag = 1;
if ($badFlag == 1) {
// Bad word detected die...
}
}
}
iconv、マルチバイト関数(mbstring)を読み、演算子/ uを使用するとこれが役立つ場合があります。いくつか試してみましたが、正しく機能しないようです。これを解決し、ラテン語と非ラテン語の両方のキーワードに一致させるために、どんな助けでも大歓迎です。