0

我一直在stackover中一遍又一遍地搜索,但没有找到解决我问题的方法。我需要将用户输入的字符串与 mysql 数据库中的现有字符串进行比较。存储在数据库中的字符串如下: xuất khẩu这意味着:“xuất khẩu” :)

用户从文本框中输入的字符串是:“xuất khẩu”

但是当我尝试比较 2 个字符串、mb_encode、htmlentities 等时,它绝不表示字符串匹配!

数据库使用utf-8通用ci,网站正确显示utf8字体。

任何人都可以给我解决方案吗?

4

3 回答 3

1

将以下内容添加到我的.ini文件中解决了该问题:

character-set-server = utf8  
collation-server = utf8_general_ci
于 2012-07-20T05:54:22.900 回答
1

确保在比较时使用:

html_entity_decode($mysqlValue, ENT_QUOTES, 'UTF-8'); // Compare with the unprocessed user input.

(这会将来自 HTML 实体的 DB 值解码为特殊字符。)

或者:

htmlentities($userInput, ENT_QUOTES, 'UTF-8'); // Compare with the unprocessed DB value.

(这会将用户的输入从包含特殊字符的字符串编码为包含 HTML 实体的字符串。)

数据库中的文本是 HTML 实体,所以我会寻找基于它的解决方案。我怀疑 UTF-8 编码是否存在问题,但最好在函数中指定以防万一。

于 2012-07-19T07:57:31.967 回答
0

对表字段使用“utf-8 general ci”时,值会正确存储,但在比较字符串时会遇到问题。例如,字符串 'tèst' 和 'test' 在与字符集和排序规则为 utf-8 general ci..的值进行比较时将返回 true。

尝试将排序规则/字符集设置为 utf8_bin。这在执行字符串比较时要安全得多。

但请记住,utf8_bin (ci) 没有不区分大小写的版本,因此您必须在保存之前将字符转换为小写。

问候,

于 2012-07-19T09:20:24.407 回答