我正在使用PHP开发一个网站,可以自动在海报上创建。用户可以选择在php文件中定义的颜色主题,如下所示:
$f_1 =array(
"1" => "#1e354c ",
"2" => "#ebcc85",
"3" => "#133745"
);
$f_3 =array(
"1" => "#1e354c",
"2" => "#b5cd9c",
"3" => "#133745"
);
$themes = array(
"Tema 1" => json_encode($f_1),
"Tema 2" => json_encode($f_3)
);
echo "<select class='form-control' id='themeselect' onchange='updatePoster()'>";
foreach($themes as $cc => $name) {
echo '<option value="' . $name . '">' . $cc . '</option>';
}
echo "</select>";
$f_1
的JSON编码看起来像这样;
"{\"1\":\"#1e354c \",\"2\":\"#ebcc85\",\"3\":\"#133745\"}"
问题是“Tema 1
”的值是“{
”
我还尝试使用serialize()
代替json_encode()
,但这也不起作用。
答案 0 :(得分:2)
"
在由"
个字符分隔的属性值中具有特殊含义。
在插入HTML文档之前,使用htmlspecialchars()
将非HTML数据转换为HTML。
foreach($themes as $cc => $name) {
?>
<option
value="<?php echo htmlspecialchars($name); ?>">
<?php echo htmlspecialchars($cc); ?>
</option>
<?php
}
?>
答案 1 :(得分:1)
json_encode返回一个字符串。作为开发人员,您正确使用它是一项工作。
虽然\"
是在PHP 中双引号字符串中转义双引号的正确方法,但HTML属性不是这种情况。 "
是。
所以我打赌生成的HTML看起来像这样:
<select ...>
<option value="{"1":...>Tema1</option>
</select>
请注意为什么updatePoster
告诉您所选的值为"1"
?
答案 2 :(得分:0)
您也可以更改此echo语句:
echo '<option value="' . $name . '">' . $cc . '</option>';
到
echo "<option value='$name'>$cc</option>";
所以该值由单引号而不是双引号分隔。这也应该可以解决你的问题。