将unicode输入与数据库字符串进行比较

时间:2012-07-19 07:51:04

标签: php mysql html utf-8 encode

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

来自文本框的字符串用户输入是:“xuấtkhẩu”

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

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

任何人都可以为我提供解决方案吗?

3 个答案:

答案 0 :(得分:1)

确保在使用时进行比较:

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

(这会将HTML实体的数据库值解码为特殊字符。)

或者:

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

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

数据库中的文本是HTML实体,因此我会寻找基于此的解决方案。我怀疑UTF-8编码是个问题,但是为了以防万一,最好指定一下这个函数。

答案 1 :(得分:1)

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

character-set-server = utf8  
collation-server = utf8_general_ci

答案 2 :(得分:0)

对表格字段使用'utf-8 general ci'时,值会正确存储,但在比较字符串时会出现问题。例如,字符串'tèst'和'test'在与charset和collat​​ion为utf-8 general ci的值进行比较时将返回true。

尝试将collat​​ion / charset设置为utf8_bin。执行字符串比较时,这样更安全。

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

此致