这令人难以置信。我在网站上有一个表单,其中包含状态输入。为了使选择更容易,我提供了从互联网复制的状态名称的下拉选择,使用快速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,输入(观察到的)的值和它在数组中的比较值是有意义的(预期)看起来完全相同。但它们在代码中并不匹配。发生了什么事?