Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/70.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 搜索“إ”字符并返回所有包含“ا”或“أ”字符的单词?_Php_Mysql - Fatal编程技术网

Php 搜索“إ”字符并返回所有包含“ا”或“أ”字符的单词?

Php 搜索“إ”字符并返回所有包含“ا”或“أ”字符的单词?,php,mysql,Php,Mysql,在阿拉伯语中,有一些公众可以使用的字符,例如字符ا可以由其中一个أ、إ、ا书写,字符ه可以由其中一个ه、㶡书写,等等 为了进一步澄清:用户可以搜索关键词“我会返回所有结果”,比如“我会返回”或者“我会返回”这三个词,如果他搜索“我会返回”这三个词,那么他也会返回同样的三个词 如果用户搜索其中一个,我希望返回包含其中任何一个的所有单词 例如: 从列如“app%”或列如“cpp%”的表格中选择*或。。。。 或 从表格中选择*,如'%app%'或'%cpp%'或..这篇文章介绍了如何以不区分重音的方式

在阿拉伯语中,有一些公众可以使用的字符,例如字符ا可以由其中一个أ、إ、ا书写,字符ه可以由其中一个ه、㶡书写,等等

为了进一步澄清:用户可以搜索关键词“我会返回所有结果”,比如“我会返回”或者“我会返回”这三个词,如果他搜索“我会返回”这三个词,那么他也会返回同样的三个词

如果用户搜索其中一个,我希望返回包含其中任何一个的所有单词

例如: 从列如“app%”或列如“cpp%”的表格中选择*或。。。。 或 从表格中选择*,如'%app%'或'%cpp%'或..

这篇文章介绍了如何以不区分重音的方式搜索阿拉伯语文本。似乎当您使用utf8_unicode_ci排序规则时,بسم和㶖ِسم被认为是相等的。但你例子中的三个词却不是这样

对不起,我不懂阿拉伯语。这可能是排序规则中的错误吗?在您的情况下,是否需要对阿拉伯语进行另一次校对?同时,如果需要,您可以比较单词的子字符串。

我找到了答案:

首先,我用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")
然后我替换存储在数据库中的列值,如下所示:

$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")

问题是

select*from table,其中的术语“%pple%”存储在一个表中,然后使用levenshtein距离计算相似的单词并将它们添加到搜索查询中。我使用阿拉伯语,用户可以搜索关键词,我会返回所有结果,比如:Sougata我更新了问题。@Mauris我更新了问题。@Mauris我更新了问题。