通过 AJAX/innerHTML 显示部分 Unicode 编码的数据

Posted

技术标签:

【中文标题】通过 AJAX/innerHTML 显示部分 Unicode 编码的数据【英文标题】:Displaying partially Unicode encoded data via AJAX/innerHTML 【发布时间】:2010-11-04 05:09:19 【问题描述】:

我试图通过 AJAX 调用从服务器获取一些数据,然后使用 responseDiv.innerhtml 显示结果。来自服务器的数据部分使用 Unicode 元素编码,例如:za\u010Dat test。通过设置响应 div 的 innerHTML,这将按原样显示。也就是说,Unicode 不会在浏览器中转换为实际的表示形式。

包含页面的字符集设置为 UTF-8。我已经尝试了大多数其他的东西,比如将 unicode 表示转换为 HTML 实体,但这似乎也不起作用。

我还应该提到,来自服务器的文本也混合了 HTML 标记。 HTML 标记得到应有的尊重。例如,如果来自服务器的文本为<b>Bold this!</b>,则文本为粗体。

任何帮助表示赞赏。

维克拉姆

【问题讨论】:

【参考方案1】:

你能把 '\u010D' 换成 'č' 吗?

如果您正在设置 innerHTML,来自服务器的 HTML 标记应该可以正常工作。

这对我有用:

document.getElementById('info').innerHTML = "&#x010D; <b>Bold this</b>";

顺便说一句 - 您可以使用 Fiddler 或 Firebug 之类的工具来确保您从服务器获得预期的结果。

更新:使用正则表达式查找 unicode 字符并将其替换为 HTML 实体:

$.get('data.txt', function(data) 
    data = data.replace(/\\u([0-9A-F])([0-9A-F])([0-9A-F])([0-9A-F])/g, '&#x$1$2$3$4;');
    document.getElementById('info').innerHTML = data;
);

【讨论】:

嗯.. 文本存储在数据库中,我大概可以在发送到服务器之前运行 Unicode 到 HTMLEntity 转换器来执行此操作。有没有办法只在客户端转换 Unicode 部分? 用替代方法更新了答案。强制 javascript 将响应视为字符串。 好建议。唯一的问题是数据包含带有字符串的 HTML。因此,数据包含标记,例如:Hello 链接是:google.com">here</a> 之类的。这会导致 Javascript 在执行 eval 时抛出未终止的字符串文字错误。 几乎!我仍然收到未终止的字符串文字错误,并发现这是因为数据不仅包含 HTML,而且还包含多行的 HTML。因此,当 eval 完成时,它会中断,因为字符串没有终止并继续到更新的行。有什么办法解决吗? 我试过了:rString = rString.replace(/\n/g, " ") 和 rString = rString.replace(/\r\n/g, "")。尽管它们确实替换了换行符,但它仍然抱怨未终止的字符串文字。如果我手动进入数据库并将所有内容放在一行上,它不会抱怨这个错误。 :)【参考方案2】:

只需将 unicode 文字直接转换为字符:

'H\u0065\u006Clo, world!'.replace(/\u([0-9a-fA-F]4)/, function() return String.fromCharCode(parseInt(arguments[1],16)); );

【讨论】:

以上是关于通过 AJAX/innerHTML 显示部分 Unicode 编码的数据的主要内容,如果未能解决你的问题,请参考以下文章

ajax innerHTML 结果不从 PHP 返回 html 代码

调用必须与以“un”开头的函数名称一起使用。在卸载部分

un-物理-暗物质:百科

Drupal 7(Un)通过(取消)选择个人资料编辑页面上的分类术语为用户订阅组

电路板纽扣电池也要UN38.3检测测试

"Ng-If ="0" <div>" 的内​​容显示在 un-"collapse" 上