我有一个选项值下拉菜单和一个设置下拉菜单的开关。我从mySQL服务器中提取值并尝试将值与交换机中的值匹配以设置下拉值。
echo $attribute;
$attributeArray = array("","Hello World");
$attribute2Array = array("","Hello World");
switch ((string)$attribute) {
case "$attribute2Array[1]":
$attributeArray[1] = "selected";
break;
}
echo "
<br>Attribute:<form method=post action=attributeEdit.php>
<select name=attribute>
<option value=$attribute2Array[0] $attributeArray[0]>$attribute2Array[0]</option>
<option value=$attribute2Array[1] $attributeArray[1]>$attribute2Array[1]</option>
</select></br>
";
回声说与开关至少在chrome web浏览器中完全相同。所以我试图用“Hello&amp; nb sp; World”(在nb sp中没有空格)替换“Hello World”中的空格,但我似乎无法使其工作。我已经尝试过cast的替换和print_r等。我尝试了一个if boolean比较,它返回false。我的方法有效,除了包含空格的值。
答案 0 :(得分:0)
该空格打破了“值”,因为它不是引号中包含的字符串。
您正在生成HTML:
<option value=hello world selected>hello world</option>
浏览器如何知道“世界”与“你好”一致?
<option value="hello world" selected>hello world</option>
请注意,这里的颜色格式与浏览器的方式大致相同,“hello”为蓝色,之后的任何内容都与“value”无关。而第二个例子,整个值是蓝色的。
从技术上讲,在HTML中,只允许整数值没有引号。现在,每天都会为任何HTML属性的所有值设置引号。
P.S。编写多行块的一种更简洁的方法,允许您确保PHP不被解释为字符串:
echo <<<EOT
<html attribute="{$phpvariable}">
EOT;
http://php.net/manual/en/language.types.string.php#language.types.string.syntax.heredoc
编辑:您已将另一个损坏的版本发布为“答案”,请接受此答案并删除您的答案,因为它遇到了同样的错误,但您只是隐藏了问题。你现在工作的唯一原因是因为你好世界是一个单词。
答案 1 :(得分:-2)
echo $attribute;
$attributeArray = array("","Hello World");
$attribute2Array = array("","Hello World");
$attribute3Array = array("","Hello-World");
switch ((string)$attribute) {
case "$attribute2Array[1]":
$attributeArray[1] = "selected";
break;
}
echo "
<br>Attribute:<form method=post action=attributeEdit.php>
<select name=attribute>
<option value=$attribute2Array[0] $attributeArray[0]>$attribute3Array[0]</option>
<option value=$attribute2Array[1] $attributeArray[1]>$attribute3Array[1]</option>
</select></br>
";
相反,我只是创建了一个新数组并用“ - ”替换它,而不是空格在网页上显示空格形式。虚线值保存在mySQL中。不管怎样,谢谢