我一直在堆栈中一遍又一遍地搜索,但找不到我的问题的解决方案。
我需要将用户输入的字符串与mysql数据库中的现有字符串进行比较。
存储在数据库中的字符串如下:
xuất khẩu
表示:“xuấtkhẩu”:)
来自文本框的字符串用户输入是:“xuấtkhẩu”
但是当我尝试比较2个字符串,mb_encode,htmlentities等时..但是它绝不会说字符串匹配!
数据库使用utf-8 general ci,网站正确显示utf8字体。
任何人都可以为我提供解决方案吗?
答案 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和collation为utf-8 general ci的值进行比较时将返回true。
尝试将collation / charset设置为utf8_bin。执行字符串比较时,这样更安全。
但请记住,utf8_bin(ci)没有不区分大小写的版本,因此您必须在保存之前将字符转换为小写。
此致