PHP:使用特殊字符进行正确的字符串比较
可能重复:PHP:使用特殊字符进行正确的字符串比较,php,mysql,character-encoding,special-characters,collation,Php,Mysql,Character Encoding,Special Characters,Collation,可能重复: 我正在比较字符串以确定字符串的对应数字。一组字符串存储在MySQL数据库中,另一组字符串存储为php中数组的键 尝试查找以下字符串时,在数组中找不到该字符串。 “上学前/幼儿园/托儿所/日间母亲的儿童” 关于代码的更多信息可以在本文中找到,这使我进行了下面的测试 按照建议进行十六进制转储后,我得到了以下结果 从MySQL数据库: 43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c
我正在比较字符串以确定字符串的对应数字。一组字符串存储在MySQL数据库中,另一组字符串存储为php中数组的键 尝试查找以下字符串时,在数组中找不到该字符串。 “上学前/幼儿园/托儿所/日间母亲的儿童” 关于代码的更多信息可以在本文中找到,这使我进行了下面的测试 按照建议进行十六进制转储后,我得到了以下结果 从MySQL数据库:
43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 e8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72
从php中的字符串:
43 68 69 6c 64 20 61 74 74 65 6e 64 69 6e 67 20 70 72 65 2d 73 63 68 6f 6f 6c 2f 6e 75 72 73 65 72 79 20 73 63 68 6f 6f 6c 2f 63 72 c3 a8 63 68 65 2f 64 61 79 2d 6d 6f 74 68 65 72
区别在于MySQL数据库中的“E8”与“C3A8”或“è”与php字符串中的“Ô
那么,如何确保硬编码的php数组键字符仍然是“è”?您应该在php和MySQL中使用相同的编码 如果PHP字符串是UTF-8编码的,那么表的
charset
必须是utf8
,而排序规则应该是utf8\u general\u ci
或utf8\u unicode\u ci
。此外,您还必须告诉MySQL您也希望查询UTF-8中的结果。以下是实现这一目标的三种方法:
查询连接:在连接到MySQL之后执行设置名称utf8
使用PDO:$PDO=new PDO($dsn,$user,$password,array(PDO::MYSQL_ATTR_INIT_COMMAND=>'SET NAMES utf8');
这与上面的基本相同,但由PDO自动执行
永久(my.cnf):这将为所有连接设置UTF-8隐式。只需将:init connect='set NAMES utf8'
添加到MySQL的配置文件my.cnf
我个人使用第三个选项,但在共享环境中,我会选择第二个。PHP文件保存在UTF-8中,但您的数据库使用拉丁语1/ISO-8859-1为什么重复相同的问题?我看不出有任何区别,所以我不确定为什么需要一个新问题?我认为这是我之前问题的扩展获得了优势。请注意:如果您(上帝禁止)使用较旧的MySQL扩展,请始终使用适当的API,例如MySQL\u set\u charset
。不要运行集名称
查询。