PHP:含有特殊字符数组的键未找到(PHP : Array key containing speci

2019-08-01 21:00发布

我试图将字符串转换为使用与键查找表的数字阵列。

这是数组:

$q2_10_lt = array("Full-time worker" => 1
                , "Part-time worker" => 2
                , "Unemployed, would like to work" => 3
                , "Unable to work (chronically ill/mentally handicapped/physically handicapped)" => 4
                , "Pensioner/retired" => 5
                , "Housewife/husband" => 6
                , "Student at university of college (post-matric)" => 7
                , "High school learner" => 8
                , "Primary school learner" => 9
                , "Child attending pre-school/nursery school/crèche/day-mother" => 10
                , "Child staying at home" => 11
                , "Other" => 12);

该问题的关键是“上学前/幼儿园/托儿所/天,母子”。 使用下面的代码时,该键未找到:

$person_tempArr[] = $q2_10_lt[$row["q2_10"]] != null ? $q2_10_lt[$row["q2_10"]] : "12";
$person_tempArr[] = $q2_10_lt[$row["q2_10"]] == null ? $row["q2_10"] : "";

$row["q2_10"]值是刚刚从MySQL数据库所采取的不同的字符串。

我应该得到来自第一线的10号,而是我得到12和完整的字符串不变“孩子上学前/幼儿园/托儿所/天娘”。

这必须是与特殊字符è,但我一直没能解决这个问题。 任何帮助请。

编辑1

做一个十六进制转储的建议后,我得到了以下结果

从SQL数据库:

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

所不同的是“E8”与从PHP字符串“C3A8”或“E”,从DB和“A”。

那么,如何去确保PHP字符串仍然是“E”?

Answer 1:

你从你的数据库层得到的字符串是不是你的关键使用相同字符串。 为了解决这个问题,使用相同的字符串每次。

同样的方法在这里,该字符串是一样的逐字节。 做一个字符串的hexdump都可以从数据库中获取。

然后输入的密钥(或至少是特殊的字母)的二进制字符串。 这将使你的代码更健壮,因为这将在无论工作编码你保存PHP文件。

编辑:你比较对数据库,关键需要共同与在数据库中的二进制序列:

        , "Child attending pre-school/nursery school/cr\xE8che/day-mother" => 10
                                                       ^^^^

使用十六进制符号来表达你是不是能够“型”与您的UTF-8编码的PHP文件的字节数。 该数据库使用了一些ISO-8859-1或类似的编码。

正如你可以看到它只是\x ,然后十六进制编码E8 。 它的工作原理在PHP双引号字符串。



Answer 2:

最后我改变了我的表列编码utf8_general_ci和表格的排序规则utf8_general_ci 。 我还添加以下代码行到我的PHP文件:

ini_set('default_charset', 'utf-8');

//set encodig to utf-8
mysql_query("SET NAMES 'utf8'"); 
mysql_query("SET CHARACTER SET 'utf8'");

现在是工作,但我可以做的东西不建议?



文章来源: PHP : Array key containing special character not found