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

标签 php character-encoding arabic string-comparison multibyte

我在 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_strposmb_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);
}

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

关于PHP 阿拉伯文文本使用 strpos 进行比较,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14935259/

相关文章:

java - 非 UTF 8 编码的 CSV 特殊字符问题

vb.net - 字节到字符串 - 模糊字符

java - com.twilio.sdk.TwilioRestException : The 'To' number +? ????????????不是有效的电话号码

php - 使用 PHP mysql 显示阿拉伯数据时出错

php - Facebook 登录 PHP : URL Blocked: This redirect failed because the redirect URI is not whitelisted in the app’s Client OAuth Settings

将数据返回到数据库 MYSQL 的 PHP 页面

PHP register_shutdown_function 在脚本从命令行被杀死时触发?

c# - 如何为 Twitter 更新编码变音符号?

php - 奇怪的 MySQL 编码问题

php - 从数据库中检查3个表,同时保留每个表的信息以验证登录表单php