PHP/SQL : searching against html entities stored in database

标签 php mysql html-entities

我经常使用使用重音字符的语言,例如é。我将内容存储在“utf_8_bin”编码表中,并将重音字符也转换为 HTML 实体。

因此,例如,“Términator”将在数据库中存储为“T & eacute ; rminator”(必须在其中添加空格以阻止其在线呈现)。

当用户搜索“términator”时,会找到一个匹配项,因为查询也被转换为 HTML 实体,并且 SQL 查询将参数的两边“小写”为“lcase”。

我现在遇到的问题是,客户希望能够搜索“Terminator”(“e”上没有重音)以获得匹配“Términator”的结果。

我不想改变我存储数据的方式,特别是因为存储 HTML 实体可以解决许多其他问题。所以我问是否有更简单的解决方案。谢谢!

最佳答案

你应该在你的查询中使用正确的排序规则 utf8_unicode_ci (这没有 html 实体)

https://dev.mysql.com/doc/refman/5.5/en/charset-unicode-sets.html

您使用的排序规则决定了您从数据库返回的结果。以及如何比较这些字符。

SELECT * FROM some_table WHERE title LIKE "Terminator" COLLATE utf8_unicode_ci

此查询将返回标题为términatorTerminator 等的记录,请注意,它会进行不区分大小写的比较(_ci 部分整理)。

utf8_unicode_ci 有点慢,但这确实很小,您甚至可能不会注意到其中的区别。

还有更多排序规则可以满足您的需求,不确定是否有可用于 html 实体的排序规则。您可以将自己的排序规则添加到 mysql 数据库中,以创建支持自己的 htmlentities,例如 utf8_htmlentities_cihttps://dev.mysql.com/doc/refman/5.7/en/adding-collation.html

这是一个很好的电话号码示例 https://dev.mysql.com/doc/refman/5.7/en/ldml-collation-example.html

关于PHP/SQL : searching against html entities stored in database,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43385283/

相关文章:

php - 尝试回应准备好的声明

php - 如何在php脚本中转义这个mysql查询?

php - 通过联系人 DOB 更新 'Age Group ID' - MySQL + PHP

javascript - MySQL AJAX PHP 通知模块

PHP 回显 '<<<'

MySQL 禁用外键检查 : What happens to "On Delete"?

mysql - 调整MySQL排名查询

php - 无法访问其他表数据的SQL

PHP Htmlentities - 双重编码

html - 通过knockoutjs 设置包含HTML 实体值的HTML 标签属性