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


Printing out array of objects into a HTML data attribute

我希望有人能给我一些解决这个问题的建议。我必须以下面的格式将对象数组打印到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()和htmlenties()的原因。

下面是我打印出来的破坏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)' }]

这将在数据源="属性中。

从数据库返回的值应该是这样的5'3"(160厘米)'-请参阅额外的单引号,但这不会出现在数据库中。

任何修复或以另一种方式做得更好的建议都将是一个很大的帮助。

提前感谢


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

尝试在htmlentities($v) like so: htmlentities($v, ENT_QUOTES)上添加ENT_QUOTES。这应该会转换你的引号,这样它们就不会干扰HTML。当你处理它(转换回来)时,你必须在解码上有ENT_QUOTES

这就是结果:

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

转换:

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