非英文字符作为数组键 - “未定义索引”

时间:2011-07-30 23:27:22

标签: php mysql

我有一个名字数组,我正在从mysql表中读取。一切正常,除了我刚注意到,如果名称包含任何非英文字符,例如斯堪的纳维亚,希腊等,这会导致错误,“未定义的索引”。

我不知道的是,我的应用程序的另一部分使用相同的功能列出了名称。唯一的区别是我在发生此错误时专门将名称作为参数传递。其他时候我只是遍历整个列表并回显所有名称。

每个名称都是数组键,我收到了else返回行的错误:

   if($nameParam ==""){ 
         return $listOfNames;
   }
   else{ 
         return $listOfNames[$nameParam];   
   }

我有什么想法可以解决这个问题吗?

以某种方式检查每个名称并将某种编码/解码写入/读取应用于mysql表会更好吗?如果是这样,最好的方法是什么? 感谢..

1 个答案:

答案 0 :(得分:10)

我已经查看了PHP C代码,看看PHP是否以任何方式修改/剥离数组键字符串中的unicode字符,但在那里找不到任何转换逻辑。 为了证实这一点,我在php.net邮件列表上提出了一个问题:

问: ....等等......我只是想知道 - 当使用unicode characteres时 数组键 - PHP会以任何方式剥离它们或影响它们吗? 或者PHP只是将密钥视为二进制字符串,故事的结尾?

我相信字符串数组键被视为二进制字符串,和 从未修改过。我找不到你的来源,但我一直在努力 这个假设从来没有遇到过问题。 UTF-8键绝对可以正常工作 (*);我也不知道钥匙可以有的最大长度(意味着你 不应该担心多字节字符被截断 在中间)。

因此,我现在相信,在数组键中使用任何UTF8字符都不会影响您照常使用数组的能力。

同时

我确定你已经知道这一点,但我会检查db使用正确的编码来存储数据。 在mysql中,我总是使用 UTF-8 字符集和 utf8_general_ci 整理。