我将html存储在mysql数据库中作为原始html。我正在拉取内容并将其放入数组中,如下所示。该数组是json_encoded,但如果有任何双引号或url,则显示JSON字符串的javascript会中断。
是否可以通过JSON对html进行编码?
以下是我正在使用的摘录
<?php
$rows = array();
$sql ="SELECT html FROM table";
try {
$sth = $dbh->query($sql);
while($r = $sth->fetch(PDO::FETCH_OBJ)) {
$rows[] = $r;
}
}
catch(PDOException $e) {
echo "I'm sorry, Dave. I'm afraid I can't do that. $e";
}
?>
var json = JSON.parse('<?php print json_encode(json_encode($rows)); ?>');
当前输出的json字符串会抛出一个javascript错误,说明意外&lt;
[{"html":"<a href="http:\/\/www.url.com">\n<img src="http:\/\/www.url.com\/img\/logo.png">\n<\/a>"}]
请不要讲授为什么这可能是一件坏事。这是我的客户特别要求的,我只需要知道是否可能。
答案 0 :(得分:3)
我同意Mark B的回答,但你可以使用fetchAll()和json_encode()这个函数的结果。为什么使用PDO对象提取而不是数组提取?
<?php
$rows = array();
$sql ="SELECT hmtl FROM table";
try {
$sth = $dbh->query($sql);
$rows = $sth->fetchAll(PDO::FETCH_ASSOC);
}
catch(PDOException $e) {
echo "I'm sorry, Dave. I'm afraid I can't do that. $e";
}
?>
var json = <?= json_encode($rows); ?>;
此外,请考虑通过AJAX获取它。
答案 1 :(得分:2)
该行
var json = JSON.parse('<?php print json_encode(json_encode($rows)); ?>');
...容易受到结果JSON中的单引号(以及其他东西;你必须双重逃避大量的东西)。但你不需要或不想这样做。这样做:
var json = <?php print json_encode(json_encode($rows)); ?>;
json_encode
返回有效的JSON,JSON是JavaScript对象初始化程序语法的子集,因此上面将生成描述该对象的有效JavaScript代码。如果您正在输出JavaScript代码,因为您似乎来自该行,则没有理由间接通过字符串。正如你所发现的那样,有理由不这样做。
答案 2 :(得分:2)
不需要json.parse业务。 JSON IS 毕竟是有效的javascript,所以很简单
var json = <?php echo json_encode($rows); ?>;
就是你所需要的一切。
答案 3 :(得分:-1)
在填充JSON对象之前,您可以使用htmlentities()将所有适用的字符转换为HTML实体,然后在打印出来时,如果您使用ISO标准作为字符集,则只使用html_entity_decode()。对不起,如果我可能误解了这个问题。