Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/68.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP:使用特殊字符进行正确的字符串比较_Php_Mysql_Character Encoding_Special Characters_Collation - Fatal编程技术网

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
    。不要运行
    集名称
    查询。