2013-06-11 100 views
2

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

是否有可能通过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错误说意外<

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

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

+1

为什么不使用fetchAll()和json_encode? – Robert

+0

idk if是一个错字或实际问题,但是,您选择列'hmtl',是不是'html'? –

回答

2

没有必要为json.parse业务。 JSON IS有效的JavaScript毕竟,这样一个简单的

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

是你所需要的。

+0

我已经改变了它,如你所说,并更新我的问题 – Somk

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代码,就像您似乎来自该行,则没有理由间接通过字符串。正如你发现的那样,有一个原因不是。

-1

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

+0

HTML实体与JavaScript代码无关,除非它属于HTML属性值,我们没有理由怀疑OP的'var json = ...'行是(并有几个理由怀疑它不是)。 –

3

我同意马克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获取它。

+2

2001参考每次获得+1。 – hammus