可能重复:
PHP : Array key containing special character not found
我正在比较字符串以确定字符串的相应数字。一组字符串存储在MySQL DB中,另一组字符串存储为php中数组的键。
尝试查找以下字符串时,在数组中找不到它。 “孩子上学前/托儿所/托儿所/日间母亲”
此previous question中提供了有关该代码的更多信息,这使我进行了以下测试。
按照建议进行十六进制转储后,我得到了以下结果
来自MySQL DB:
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 DB的“E8”vs“C3A8”或“è”与来自php字符串的“è”。
那么我怎样才能确保硬编码的php数组关键字仍然是“è”?
答案 0 :(得分:1)
你应该在PHP和MySQL中使用相同的enconding。
如果您的PHP字符串采用UTF-8编码,那么您的表格charset
必须为utf8
,而collation
应为utf8_general_ci
或utf8_unicode_ci
。此外,您必须告诉MySQL您想要以UTF-8查询的结果。以下是实现此目的的三种方法:
SET NAMES utf8
。$pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');
这与上述基本相同,但由PDO自动执行。init-connect='SET NAMES utf8'
添加到MySQL的配置文件my.cnf
。我个人使用第三种选择,但在共享环境中,我会选择第二种选择。