当北卡罗来纳州不等于北卡罗来纳州

时间:2014-07-15 01:14:07

标签: php arrays character-encoding associative-array

这令人难以置信。我在网站上有一个表单,其中包含状态输入。为了使选择更容易,我提供了从互联网复制的状态名称的下拉选择,使用快速Python脚本格式化,使用datalist元素。我最初注意到在空格之前出现了一些字符,但是很容易通过设置为UTF-8的编码标题来修复。现在,我正在尝试用数据库存储的缩写替换状态名称列表,使用[“alabama”=>形式的数组。 “al”,“alaska”=> “ak”...],但名字不匹配。这里有一些代码作为示例,我已经为显示的输出运行了。假设从下拉列表中选择了州“北卡罗来纳州”,并且从所述下拉列表中获取了self :: $ data ['state'],因此保留了“北卡罗来纳州”的值。

echo self::$data['state']."\n";              // Prints stored state value
$s = strtolower(self::$data['state']);       // Stores it lowercase as $s
echo "Observe: ".$s."\n";                    // Prints it, as the dropdown value
echo "Expect:  ".array_flip($states)['nc']."\n"; // Prints the north carolina key
echo "Observed matches expected: ";
if (isset($states[$s])) {                    // If north carolina is an array key
    echo 'true';                             //   print true
} else {                                     // Otherwise
    echo 'false';                            //   print false
}

我正在检查输入(self::$data['state'])中的状态名是否是数组中的键。因为我需要从数组中获取密钥名称,编码为'north carolina' => 'nc',我使用array_flip()来翻转键和值。因为输入的下拉列表首字母大写,并且数组全部为小写,所以我使用strtolower()来获取全部小写的输入值。

现在这是有趣的部分。这是输出,直接从浏览器复制和粘贴:

North Carolina
Observe: north carolina
Expect:  north carolina
Observed matches expected: false

如果在那里有一些剩余的,从编码问题,但在浏览器中显示为UTF-8,输入(观察到的)的值和它在数组中的比较值是有意义的(预期)看起来完全相同。但它们在代码中并不匹配。发生了什么事?

0 个答案:

没有答案