我在ISO-8859-1中编码了中文字符,例如兼 = 兼
这些字符使用AJAX从数据库中获取,并由Json使用json_encode发送
然后我使用模板Handlebars在页面上设置数据
当我查看ajax页面时,字符显示正确,源仍然是编码的
但最终结果显示加密字符。
我尝试使用unescape
对javascript部分进行解码,但是没有使用该模板的foreach可以解码特定变量,因此崩溃了。
我尝试用htmlspecialchars_decode
在PHP端进行解码,但没有成功。
两个页面都是用ISO-8859-1编码的,但如果需要,我可以用UTF8更改它们,但数据库中的数据仍然用ISO-8859-1编码。
感谢您的帮助。
答案 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}}}