json编码-特殊字符


json encode - special characters

我在一个相当简单的报价系统中使用json_encode函数:

<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

第二次编辑:

希腊字母好像有问题?有什么建议吗?

您应该使用htmlspecialchar()。这与适当的选项将使您的字符串成为有效的HTML。json_encode是从PHP值中获取json字符串。您将其与字符串一起使用,因此实际上您不希望使用json。特别是我不明白你为什么要把它和post_id一起使用。