在阿拉伯语中,公众可以使用一些字符,例如字符ا
可以由这些(أ,إ,ا)
中的一个来写,字符ه
可以由这些(ه, ة)
中的一个来写,等等。
更明确:如果用户搜索关键字ايمان
,我将返回所有像ايمان or أيمان or إيمان
一样的结果,如果他搜索إيمان
,我也会返回同样的三个词,如果他搜索أيمان
,我也会返回同样的三个词。
我希望如果用户搜索其中一个(أ,إ,ا)
返回包含其中任何一个的所有单词
我找到了答案:
首先,我将php搜索关键字中的所有类似字符替换为一个字符,如下所示:
$keyword = str_replace('أ', 'ا', $keyword);
$keyword = str_replace('إ', 'ا', $keyword);
$keyword = str_replace('ى', 'ي', $keyword);
$keyword = str_replace('ة', 'ه', $keyword);
然后我替换存储在数据库中的列值,句子如下:
->whereRaw(" (REPLACE(REPLACE(REPLACE(REPLACE(page_title_ar, 'ة', 'ه'), 'أ', 'ا'), 'إ', 'ا'), 'ى', 'ي') like '%" . $keyword . "%' OR "
. "REPLACE(REPLACE(REPLACE(REPLACE(page_summery_ar, 'ة', 'ه'), 'أ', 'ا'), 'إ', 'ا'), 'ى', 'ي') like '%" . $keyword . "%' OR "
. "REPLACE(REPLACE(REPLACE(REPLACE(page_content_ar, 'ة', 'ه'), 'أ', 'ا'), 'إ', 'ا'), 'ى', 'ي') like '%" . $keyword . "%' OR "
. "REPLACE(REPLACE(REPLACE(REPLACE(page_title_en, 'ة', 'ه'), 'أ', 'ا'), 'إ', 'ا'), 'ى', 'ي') like '%" . $keyword . "%' OR "
. "REPLACE(REPLACE(REPLACE(REPLACE(page_summery_en, 'ة', 'ه'), 'أ', 'ا'), 'إ', 'ا'), 'ى', 'ي') like '%" . $keyword . "%' OR "
. "REPLACE(REPLACE(REPLACE(REPLACE(page_content_en, 'ة', 'ه'), 'أ', 'ا'), 'إ', 'ا'), 'ى', 'ي') like '%" . $keyword . "%'"
. " ) and deleted <> 1")
和问题
try ORING
例如:SELECT * from TABLE WHERE collike 'app%'或collike 'cpp%'或....或SELECT * from TABLE WHERE collike '%app%'或collike '%cpp%'或....
这篇文章(MySQL变音符不敏感搜索(阿拉伯语))涵盖了以变音符不敏感的方式搜索阿拉伯语文本。似乎当您使用utf8_unicode_ci排序时,بسم和بِسْمِ被认为是相等的。但你举的例子中的三个词就不是这样了。
我不懂阿拉伯语,对不起。这是否可能是排序中的错误?在你的情况下,阿拉伯语是否需要另一种整理?同时,如果需要的话,您可以比较单词的子字符串。