2013-06-11 148 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