PHP 阿拉伯文文本使用 strpos 进行比较

2024-03-25

我在 mysql 表中有一个阿拉伯语关键字,例如

    *#1591; *#1610; *#1585;*#1575;*#1606

// 请考虑用 & 代替 * ,带有 '&' 的值会自动转换为阿拉伯语。

Mysql表编码:utf8_general_ci

我从外部资源示例 twitter 中获取一些字符串。

我想将关键字与我收到的推文相匹配。

 $tweet = 'وينج وأداسي الاماراتية توقعان اتفاقية تعاون لتوفير أنظمة الطائرات بدون طيا';

  $keyword = '*#1591; *#1610; *#1585;*#1575;*#1606'; //From db

  $status = strpos ($tweet, $keyword)

$status 始终返回 false。

我已经检查过 utf8_encode(), utf_8_decode() , mb_strpos() 没有任何运气。

我知道在比较之前需要将两个字符串转换为一种通用格式,但我需要转换哪种格式?

请帮我解决这个问题。


由于阿拉伯符号是使用多字节字符编码的,因此您必须使用支持此类约束的函数:grapheme_strpos http://php.net/grapheme_strpos and mb_strpos http://php.net/mb_strpos(以该顺序)。

使用它们代替普通的旧 strpos 就可以解决问题。

另外,请记住,您可能需要在使用之前检查其可用性,因为并非所有托管环境都启用它们:

if (function_exists('grapheme_strpos')) {
    $pos = grapheme_strpos($tweet, $keyword);
} elseif (function_exists('mb_strpos')) {
    $pos = mb_strpos($tweet, $keyword);
} else {
    $pos = strpos($tweet, $keyword);
}

最后但并非最不重要的一点是,检查文档以了解函数采用的不同参数,作为字符串使用的编码。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

PHP 阿拉伯文文本使用 strpos 进行比较 的相关文章

随机推荐