2014-10-29 177 views
0

我使用json_encode函數在一個相當簡單的報價系統,我有:JSON編碼 - 特殊字符

<script type='text/javascript'> 
postQuote[<?php echo json_encode($post['post_id']); ?>] = <?php echo json_encode($post['post_text']); ?> 
</script> 

它輸出這樣的:

postQuote["11241"] = "&amp;Kappa;&amp;alpha;&amp;lambda;&amp;eta;&amp;sigma;&amp;pi;\u03ad&amp;rho;&amp;alpha; &amp;alpha;&amp;lambda;\u03ac&amp;nu;&amp;iota;&amp;alpha; &amp;mu;&amp;omicron;&amp;upsilon;. \u0388&amp;chi;&amp;omega; &amp;kappa;\u03ac&amp;pi;&amp;omicron;&amp;iota;&amp;epsilon;&amp;sigmaf; &amp;alpha;&amp;pi;&amp;omicron;&amp;rho;\u03af&amp;epsilon;&amp;sigmaf;. \r\n1&amp;omicron;&amp;nu;: &amp;Eta; &amp;pi;&amp;rho;\u03ac&amp;sigma;&amp;iota;&amp;nu;&amp;epsilon;&amp;sigmaf; &amp;delta;&amp;iota;&amp;alpha;&amp;phi;&amp;eta;&amp;mu;\u03af&amp;sigma;&amp;epsilon;&amp;iota;&amp;sigmaf; &amp;mu;&amp;omicron;&amp;upsilon; &amp;delta;\u03af&amp;nu;&amp;omicron;&amp;upsilon;&amp;nu; $0.01; &amp;Alpha;&amp;nu; &amp;nu;&amp;alpha;&amp;iota; &amp;tau;\u03cc&amp;tau;&amp;epsilon; &amp;mu;\u03ac&amp;lambda;&amp;lambda;&amp;omicron;&amp;nu; \u03ad&amp;chi;&amp;omega; &amp;pi;&amp;rho;\u03cc&amp;beta;&amp;lambda;&amp;eta;&amp;mu;&amp;alpha; &amp;gamma;&amp;iota;&amp;alpha;&amp;tau;\u03af &amp;epsilon;\u03af&amp;chi;&amp;alpha; $0.60 &amp;pi;\u03ac&amp;tau;&amp;eta;&amp;sigma;&amp;alpha; &amp;kappa;&amp;alpha;&amp;iota; &amp;tau;&amp;eta;&amp;sigmaf; 4 &amp;pi;&amp;rho;\u03ac&amp;sigma;&amp;iota;&amp;nu;&amp;epsilon;&amp;sigmaf; &amp;kappa;&amp;alpha;&amp;iota; &amp;pi;\u03ae&amp;gamma;&amp;alpha; &amp;mu;\u03cc&amp;nu;&amp;omicron; $0.062.\r\n2&amp;omicron;&amp;nu;: \u03ad&amp;chi;&amp;omega; 5 rented ref. &amp;Tau;\u03ce&amp;rho;&amp;alpha; &amp;mu;&amp;pi;&amp;omicron;&amp;rho;\u03ce &amp;nu;&amp;alpha; &amp;alpha;&amp;gamma;&amp;omicron;&amp;rho;\u03ac&amp;sigma;&amp;omega; \u03ac&amp;lambda;&amp;lambda;&amp;omicron;&amp;upsilon;&amp;sigmaf; 3 &amp;mu;&amp;epsilon; $0.6 &amp;lambda;\u03ad&amp;tau;&amp;epsilon; &amp;nu;&amp;alpha; &amp;tau;&amp;omicron;&amp;upsilon;&amp;sigmaf; &amp;alpha;&amp;gamma;&amp;omicron;&amp;rho;\u03ac&amp;sigma;&amp;omega; &amp;eta; &amp;nu;&amp;alpha; &amp;pi;\u03ac&amp;omega; $1 &amp;kappa;&amp;alpha;&amp;iota; &amp;nu;&amp;alpha; &amp;pi;\u03ac&amp;rho;&amp;omega; \u03ac&amp;lambda;&amp;lambda;&amp;omicron;&amp;upsilon;&amp;sigmaf; 5;\r\n\r\n&amp;Alpha;&amp;upsilon;&amp;tau;\u03ac &amp;pi;&amp;rho;&amp;omicron;&amp;sigmaf; &amp;tau;&amp;omicron; &amp;pi;&amp;alpha;&amp;rho;\u03cc&amp;nu;."  

以上文字是(希臘):

Καλησπέρα αλάνια μου. Έχω κάποιες απορίες. 
1ον: Η πράσινες διαφημίσεις μου δίνουν $0.01; Αν ναι τότε μάλλον έχω πρόβλημα γιατί είχα $0.60 πάτησα και της 4 πράσινες και πήγα μόνο $0.062. 
2ον: έχω 5 rented ref. Τώρα μπορώ να αγοράσω άλλους 3 με $0.6 λέτε να τους αγοράσω η να πάω $1 και να πάρω άλλους 5; 

Αυτά προς το παρόν. 

現在,據我瞭解,它將字符串編碼爲HTML字符,因此在輸出之前,我這樣做:

$(".quote").click(function() { 
    $("#text").val($("<div>").html("[quote]" + postQuote[$(this).attr('name')] + "[/quote]").text()); 
}); 

這沒有幫助。輸出仍然與上面相同。

我在做什麼錯?

編輯:

$s = $dbh->prepare(" 
    SELECT t.*, c.forum_name, 
    (SELECT count(*) FROM forum_posts WHERE topic_id=t.topic_id AND post_deleted=0) as posts 
    FROM forum_topics t 
    JOIN forum_cats c on c.forum_id = t.forum_id 
    WHERE t.topic_id=:id 
    "); 
$s->bindParam(':id', $id); 
$s->execute(); 
$q = $s->fetch(PDO::FETCH_ASSOC); 

    while ($post = $p->fetch(PDO::FETCH_ASSOC)) { 

//Postquote inside here. 
}    

我的表forum_postsutf8_general_ci

2日編輯:

好像用希臘字母的問題嗎?有什麼建議麼?

+0

'json_encode()'工作在utf8字符串上,所以你的輸出看起來不太可能。你如何填寫'$ post'變量,你可以做一個'var_dump($ post);'? – jeroen 2014-10-29 14:47:54

+0

@ jeroen請看我更新的問題。我已經包含了PHP。 – oliverbj 2014-10-29 14:51:54

+0

您需要縮小問題的位置。看起來你在某處使用'htmlentities()'。 – jeroen 2014-10-29 15:07:06

回答

0

您應該使用htmlspecialchars()。這與適當的選項將使您的字符串是有效的HTML。 json_encode是從PHP值獲取json字符串。你正在使用這個字符串,所以實際上你不想擁有json。特別是我不明白你爲什麼用post_id。