2

我将 html 作为原始 html 存储在 mysql 数据库中。我正在提取内容并将其放入数组中,如下所示。该数组是 json_encoded,但如果有任何双引号或 url,则显示 JSON 字符串的 javascript 会中断。

是否可以对 html 进行编码以通过 JSON 工作?

这是我正在使用的内容的摘录

    <?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 错误,提示意外 <

[{"html":"<a href="http:\/\/www.url.com">\n<img src="http:\/\/www.url.com\/img\/logo.png">\n<\/a>"}]

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

4

4 回答 4

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 获取它。

于 2013-06-11T21:55:54.357 回答
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 代码,因为您似乎来自该行,则没有理由间接通过字符串。正如你所发现的,有理由不这样做。

于 2013-06-11T21:49:42.333 回答
2

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

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

是你所需要的全部。

于 2013-06-11T21:54:37.110 回答
-1

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

于 2013-06-11T21:52:07.563 回答