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

gra*_*rai 2 php mysql

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

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

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

   if($nameParam ==""){ 
         return $listOfNames;
   }
   else{ 
         return $listOfNames[$nameParam];   
   }
Run Code Online (Sandbox Code Playgroud)

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

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

Tha*_*Guy 10

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

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

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

因此,我现在相信,在数组键中使用任何UTF8字符都不应影响您像往常一样使用数组的能力.

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