我尝试使用从SQL数据库中的关联数组填充的HTML提交,但我希望传递多个值而不是通常的1.我尝试过使用JSON值,使用变量然后解码JSON以检索单个变量。
<select name="name">
<?php
foreach($array as $vals){
echo '<option value={"a":".'$vals['1']'.","b":".'$vals['2']'.","c":".'$vals['3']'.","d":".'$vals['4']'."}>Option Name</option>';
}?>
</select>
它按预期工作,直到其中一个选项在字符串中有间距,然后在HTML页面中。我最终遇到了一个问题,在某种程度上是一个额外的&#34;插入空间,所以我的浏览器显示值:
{"a":"x" y","b":"xy","c":"xyz","d":"xyzz"}
问题是&#34; x&#34; ý&#34;我希望成为&#34; x y&#34;。
有没有人对我如何解决这个问题有所了解?或者同样的任何其他方法来实现相同的结果?
答案 0 :(得分:1)
您需要在value
属性周围加上引号,以便空格不会终止它。还可以使用htmlentities()
对其他特殊字符进行编码。
另外,不要手动构建JSON,使用json_encode()
。
foreach ($array as $vals) {
$obj = ["a" => $vals[1], "b" => $vals[2], "c" => $vals[3], "d" => $vals[4]];
$json = htmlentities(json_encode($obj));
echo "<option value='$json'>Option Name</option>";
}
答案 1 :(得分:0)
我将JSON构建为PHP数组,然后你可以将base64_encode(json_encode())数组。这将更容易阅读,您不必担心此解决方案的其他边缘情况。
答案 2 :(得分:0)
检查位置。和'
echo '<option value={"a":".'$vals['1']'.","b":".'$vals['2']'.","c":".'$vals['3']'.","d":".'$vals['4']'."}>Option Name</option>';
校正的
echo '<option value={"a":"'.$vals['1'].'","b":"'.$vals['2'].'","c":"'.$vals['3'].'","d":"'.$vals['4'].'"}>Option Name</option>';