【问题标题】:Displaying partially Unicode encoded data via AJAX/innerHTML通过 AJAX/innerHTML 显示部分 Unicode 编码的数据
【发布时间】: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>,则文本为粗体。

任何帮助表示赞赏。

维克拉姆

【问题讨论】:

    标签: ajax unicode innerhtml


    【解决方案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));
    });

    【讨论】:

      猜你喜欢
      • 2015-07-20
      • 2017-07-04
      • 1970-01-01
      • 2018-12-21
      • 2015-09-01
      • 2015-04-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多