Php 为JSON字符串编码HTML

Php 为JSON字符串编码HTML,php,javascript,mysql,json,Php,Javascript,Mysql,Json,我将html作为原始html存储在mysql数据库中。我将内容拉入一个数组,如下所示。数组是json_编码的,但如果有任何双引号或URL,则显示json字符串的javascript将中断 可以通过JSON编码html吗 这是我正在使用的一个摘录 <?php $rows = array(); $sql ="SELECT html FROM table"; try { $sth = $dbh->query($sql);

我将html作为原始html存储在mysql数据库中。我将内容拉入一个数组,如下所示。数组是json_编码的,但如果有任何双引号或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)); ?>');
这行

var json = JSON.parse('<?php print json_encode(json_encode($rows)); ?>');
var json=json.parse(“”);
…易受结果JSON中单引号的影响(以及其他内容;您必须双重转义大量内容)。但你不需要也不想那样做。这样做:

var json = <?php print json_encode(json_encode($rows)); ?>;
var-json=;

json\u encode
返回有效的json,json是JavaScript对象初始值设定项语法的一个子集,因此上述操作将生成描述对象的有效JavaScript代码。如果您正在输出JavaScript代码,就像您从那一行中看到的那样,那么没有理由间接地使用字符串。正如您所发现的,有理由不这样做。

在填充JSON对象之前,您可以使用htmlentities()将所有适用的字符转换为HTML实体,然后在打印它们时,如果您使用ISO标准作为字符集,则只需使用HTML_entity_decode()。抱歉,如果我误解了这个问题。

不需要json.parse业务。JSON毕竟是有效的javascript,所以

var json = <?php echo json_encode($rows); ?>;
var-json=;

就是您所需要的。

我同意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); ?>;

为什么不将fetchAll()与json_encode一起使用呢?idk如果是一个打字错误或实际问题,但是,您选择列
hmtl
,不是吗
html
?html实体与JavaScript代码无关,除非它位于html属性值中,我们没有理由怀疑OP的
var json=…
行是错误的(还有几个理由怀疑它不是。)正如你所说,我已经把它改成了这个,并更新了我的question2001参考每次都得到+1。
<?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); ?>;