为JSON字符串编码HTML

时间:2013-06-11 21:46:52

标签: php javascript mysql json

我将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>"}]

请不要讲授为什么这可能是一件坏事。这是我的客户特别要求的,我只需要知道是否可能。

4 个答案:

答案 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()。对不起,如果我可能误解了这个问题。