通过 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 = "č <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 代码