我在stackover中反复搜索,但没有找到问题的解决方案。我需要将用户输入的字符串与mysql数据库中现有的字符串进行比较。数据库中存储的字符串如下:xuất khẩu
,意思是:"xuấ;t khẩ;u":)
用户从文本框输入的字符串为:"xuấ;t khẩ;u"
但当我尝试比较2个字符串时,mb_encode、htmlentities等。但它决不会说字符串匹配!
数据库使用utf-8通用ci,网站正确显示utf8字体。
有人能给我解决这个问题的办法吗?
在进行比较时请确保使用:
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实体的字符串。)
DB中的文本是HTML实体,所以我会寻找基于此的解决方案。我怀疑UTF-8编码是个问题,但最好在函数中指定,以防万一。
在我的.ini
文件中添加以下内容解决了问题:
character-set-server = utf8
collation-server = utf8_general_ci
当对表字段使用"utf-8 general ci"时,值可以正确存储,但在比较字符串时会出现问题。例如,字符串"tèst"answers"test"在与字符集和排序规则为utf-8通用ci的值进行比较时将返回true。
尝试将排序规则/字符集设置为utf8_bin。这在执行字符串比较时要安全得多。
但请记住,utf8_bin(ci)没有不区分大小写的版本,因此在保存之前必须将字符转换为小写。
问候,