JSON数组作为HTML select中的值

时间:2015-01-23 15:52:47

标签: php html json

我正在使用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(),但这也不起作用。

3 个答案:

答案 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属性不是这种情况。 &quot;是。

所以我打赌生成的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>";

所以该值由单引号而不是双引号分隔。这也应该可以解决你的问题。