将对象数组打印到HTML数据属性中

时间:2014-10-19 21:40:16

标签: javascript php html arrays object

我希望有人能就这个问题给我一些建议。我必须以下面的格式打印出一个HTML数据属性的对象数组...

[{value:'some_val', text:'some_val'}, {value:'some_val', text:'some_val'}]

我的PHP代码生成这是一个字符串,如下所示......

$obj = "[";
    foreach ( $vals AS $key=>$v ){
                $key = addslashes( htmlentities($key) );
                $v = addslashes( htmlentities($v) );
                $obj .= "{ value:'{$key}',text:'{$v}' },";
            }
  $obj = rtrim($obj, ",") . "]";

这个工作正常,直到值中有双引号和单引号,这就是我添加addslashes()和htmlentities()的原因。

我打印出的打破我的HTML的数据示例如下。当数据被发送到数据库时它很好,但是当从数据库中检索数据时,我最终会在字符串上添加一个额外的单引号,而这与我的选项值等不匹配等。

示例数据(来自firebug所以没有实体)......

[{ value:'< 5\' (< 152 cm)',text:'< 5\' (< 152 cm)' },{ value:'5\'0" (152 cm)',text:'5\'0" (152 cm)' },{ value:'5\'1" (155 cm)',text:'5\'1" (155 cm)' },{ value:'5\'2" (157 cm)',text:'5\'2" (157 cm)' },{ value:'5\'3" (160 cm)',text:'5\'3" (160 cm)' },{ value:'5\'4" (163 cm)',text:'5\'4" (163 cm)' },{ value:'5\'5" (165 cm)',text:'5\'5" (165 cm)' },{ value:'5\'6" (168 cm)',text:'5\'6" (168 cm)' },{ value:'5\'7" (170 cm)',text:'5\'7" (170 cm)' },{ value:'5\'8" (173 cm)',text:'5\'8" (173 cm)' },{ value:'5\'9" (175 cm)',text:'5\'9" (175 cm)' },{ value:' 5\'10" (178 cm)',text:' 5\'10" (178 cm)' },{ value:'5\'11" (180 cm)',text:'5\'11" (180 cm)' },{ value:'6\'0" (183 cm)',text:'6\'0" (183 cm)' },{ value:'6\'1" (185 cm)',text:'6\'1" (185 cm)' },{ value:'6\'2"(188 cm)',text:'6\'2"(188 cm)' },{ value:'6\'3" (191 cm)',text:'6\'3" (191 cm)' },{ value:'6\'4" (193 cm)',text:'6\'4" (193 cm)' },{ value:'6\'5" (196 cm)',text:'6\'5" (196 cm)' },{ value:'6\'6" (198 cm)',text:'6\'6" (198 cm)' },{ value:'6\'7" (201 cm)',text:'6\'7" (201 cm)' },{ value:'6\'8" (203 cm)',text:'6\'8" (203 cm)' },{ value:'6\'9" (206 cm)',text:'6\'9" (206 cm)' },{ value:' 6\'10" (208 cm)',text:' 6\'10" (208 cm)' },{ value:'6\'11" (211 cm)',text:'6\'11" (211 cm)' },{ value:'7\' 0" (213 cm)',text:'7\' 0" (213 cm)' },{ value:'>7\' (> 213 cm)',text:'>7\' (> 213 cm)' }]

这将出现在data-source =&#34;&#34;属性。

从数据库返回的值就像这个5&#3;&#34; (160厘米)&#39; - 查看额外的单引号,但这不会出现在数据库中。

任何修复建议或以其他方式做得更好的建议都会有很大的帮助。

提前致谢

2 个答案:

答案 0 :(得分:1)


您可以使用PHP函数json_encode($array)来执行此操作,它将转义所有特殊字符,并在客户端正确解码
希望它有所帮助

答案 1 :(得分:0)

尝试在ENT_QUOTES htmlentities($v)上添加like so: htmlentities($v, ENT_QUOTES)。这应该转换您的报价,以便它们不会干扰HTML。处理后(将其转换回来,您必须在解码时使用ENT_QUOTES

结果如下:

<?php
$v  =   "5'3\" (160 cm)";
echo htmlentities($v, ENT_QUOTES);
?>

<强>转换:

5&#039;3&quot; (160 cm)