PHP / SQL:搜索存储在数据库中的html实体

时间:2017-04-13 06:43:44

标签: php mysql html-entities

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

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

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

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

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

1 个答案:

答案 0 :(得分:2)

您应该在您的查询中使用正确的排序规则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