PHP MySQL搜索字符编码问题

标签 php mysql character-encoding

我正在使用 PDO 连接到 MySQL 数据库。在我的连接字符串中,我已经添加了 charset=utf8mb4 并且我所有的数据库和表都是 utf8mb4_unicode_ci,但是我遇到了一个问题。

为了根据 content 表中的标题搜索条目,我使用以下代码:

SELECT * FROM content WHERE title LIKE '%سيگنالها%'

关键字是波斯语单词。现在上面的代码返回 1 个正确的结果,符合预期。

但是 如果我在我的 PHP 应用程序中创建一个表单并使用 macOS/Windows PC 或使用 Android 手机输入 SAME 词,我会得到 0 个结果.

我跟踪了这​​个问题,似乎即使用户输入的单词看起来与数据库中已有的单词完全相同,但实际上它们相同。

根据这个online tool , 十进制字符码

对于 سيگنالها,它是:1587、1610、1711、1606、1575、1604、1607、1575

同时

对于 سیگنالها 是:1587, 1740, 1711, 1606, 1575, 1604, 1607, 1575

你看出区别了吗?它是粗体的。事实上,如果您复制这两个值并将它们传递到 here 中您会亲眼看到不同之处。

我该怎么做才能解决这个恼人的问题?我正在使用 PHP 7 和 MariaDB 10.1。

最佳答案

你在单词“سيگنالها”中的第一个“ي”与第二个单词“سیگنالها”是不同的字符,即“̶”

第一个 ي: 是阿拉伯字母 YEH (U+064A)

第二个:是阿拉伯文字母FARSI YEH (U+06CC)

它们的 Unicode 实体不同,因此它们不匹配。 请看https://www.key-shortcut.com/en/writing-systems/%EF%BA%95%EF%BA%8F%D8%A2-arabic-alphabet/获取更多信息。

关于PHP MySQL搜索字符编码问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46082132/

相关文章:

php - 有没有更简单的方法来编写此内容,以便显示最新条目而不是以前的条目?

php - 在 html 中嵌入 php 以将标题(页面顶部)包含到页面中

php - html php语法错误

MYSQL: 子句 where 比较整数值

php - 存储数据的奇怪字符编码,旧脚本显示它们很好,新脚本却没有

Jquery ajax 空格和&符号问题

php - 如何在 php 中创建我的网站的日志文件?

Mysql匹配带括号边界的单词

mysql - 如何从mysql中的表中选择最后N条记录

php - 无法在php中显示中文字符