我有一个错误的字词过滤器,它使用保存在本地UTF-8编码文件中的关键字列表。该文件包含拉丁字符和非拉丁字符(大部分是英文和阿拉伯文)。一切都按预期使用拉丁语关键字,但当变量包含非拉丁字符时,匹配似乎无法识别这些现有关键字。preg_match针对本地UTF-8编码文件中的拉丁字符和非拉丁字符关键字列表的关键字变量
我该如何去匹配拉丁和非拉丁关键词。
的badwords.txt文件包括每行一个字作为在本例中用于匹配
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),并使用操作员/你可能会对此有所帮助,我尝试了一些东西,但似乎没有把它做好。任何帮助,将不胜感激解决这个问题,并让它匹配拉丁和非拉丁关键字。
谢谢Jukka,这正是我所需要的,它终于有效。我不会认为这个问题会成为事实。在我测试各种建议时,边界正则表达式实际上始终保持不变。非常感谢。 – Yallaa 2011-12-26 22:29:12