0

可能重复:
PHP:未找到包含特殊字符的数组键

我正在比较字符串以确定字符串的相应数字。一组字符串存储在 MySQL 数据库中,另一组字符串存储为 php.ini 中数组的键。

尝试查找以下字符串时,在数组中找不到它。“孩子上学前班/托儿所/托儿所/日间妈妈”

有关代码的更多信息,请参阅前一个问题,该问题导致我进行以下测试。

按照建议进行十六进制转储后,我得到以下结果

来自 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 数组键字符仍然是“è”?

4

1 回答 1

1

您应该在 PHP 和 MySQL 中使用相同的编码。

如果您的 PHP 字符串是 UTF-8 编码的,那么您的表charset必须是utf8并且collation应该是utf8_general_ciutf8_unicode_ci。此外,您必须告诉 MySQL 您也想要以 UTF-8 格式查询的结果。以下是实现此目的的三种方法:

  1. 连接查询:SET NAMES utf8连接到 MySQL 后立即执行。
  2. 使用 PDO: $pdo = new PDO($dsn, $user, $password, array(PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8');这与上面基本相同,但由 PDO 自动执行。
  3. 永久 (my.cnf):这将为所有连接设置 UTF-8 隐式。只需添加:init-connect='SET NAMES utf8'到 MySQL 的配置文件my.cnf

我个人使用第三个选项,但在共享环境中我会选择第二个。

于 2012-10-25T07:02:03.040 回答