解码ISO字符

时间:2012-05-09 02:57:22

标签: php javascript jquery

我在ISO-8859-1中编码了中文字符,例如兼 = 兼
这些字符使用AJAX从数据库中获取,并由Json使用json_encode发送 然后我使用模板Handlebars在页面上设置数据 当我查看ajax页面时,字符显示正确,源仍然是编码的 但最终结果显示加密字符。

我尝试使用unescape对javascript部分进行解码,但是没有使用该模板的foreach可以解码特定变量,因此崩溃了。
我尝试用htmlspecialchars_decode在PHP端进行解码,但没有成功。

两个页面都是用ISO-8859-1编码的,但如果需要,我可以用UTF8更改它们,但数据库中的数据仍然用ISO-8859-1编码。

感谢您的帮助。

2 个答案:

答案 0 :(得分:3)

您只是在HTML实体中表示您的角色。如果你想要它们作为“实际字符”,你需要使用可以代表这些字符的编码,ISO-8859不会这样做。 htmlspecialchars_decode不起作用,因为它只解码HTML中的一些特殊字符并且只留下其他字符。您需要html_entity_decode来解码所有实体,并且您需要为其提供一个字符集来解码才能处理中文字符,UTF-8是最明显的选择:

$str = html_entity_decode($str, ENT_COMPAT, 'UTF-8');

然后,您需要确保浏览器知道您发送的是UTF-8。如果你想以UTF-8的形式将文本存储在数据库中(你真的应该这样做),最好按照指南How to handle UTF-8 in a web app来解释所有的陷阱。

答案 1 :(得分:1)

您是否将文字包含在"双stache"把手语法?

{{your expression}}

正如Handlebars文档所提到的那样,语法HTML将其输出转义,这将导致您提及的结果,您在哪里看到实体兼而不是

使用三个大括号(" triple-stache")不会转义输出,并让浏览器正确地插入这些数字实体:

{{{your expression}}}