【问题标题】:Javascript string parser - escape issueJavascript字符串解析器 - 转义问题
【发布时间】:2015-02-07 03:11:48
【问题描述】:

我正在运行一个接收纯 utf8 文本并将内容解析为 JSON 的 Node 服务器。 JSON 的一部分将是 HTML 文档的正文。

问题是当输入有诸如“ä”或“'”之类的字符时,HTML 文档会变得很疯狂。我想这与解析器对这些特殊字符的编码/解码有关。

对此有什么想法吗?

[编辑]

解析和JSON对象基本是这样的:

var string = <mail_body><html> html code here...<html><mail_body>

var mail_body = string.split("<mail_body>")[1]
var obj = {
  "subject": "subject 123",
  "mail_body": mail_body
}

【问题讨论】:

  • 你控制传入的文本吗?
  • 取决于控制的含义。我将文本作为流接收:stream.on('data', function(chunk) {buffer = buffer+chunk.toString('utf8')})。但是数据本身来自其他来源,所以我无法删除我不想包含的字符
  • 你有什么方法可以知道 HTML 的边界是什么吗?这里可能真正有用的是输入可能采用的格式示例。例如,如果它是 json 和 html 的混合,它将比纯 html 更棘手。
  • glenatron,刚刚编辑了这篇文章,展示了我解析内容和构建 JSON 对象的方式

标签: javascript json node.js parsing


【解决方案1】:

您可以将它用于“'”

var escapedText = text.replace(/\\'/g, "\\'");

并为“带眼睛的字母 a”使用 unicode

像这样 -> \u2665

https://mathiasbynens.be/notes/javascript-escapes

【讨论】:

  • 谢谢。由于我不控制输入内容,您是否知道将替换应用于具有相同输出的所有字符的任何方法?我正在使用 Node.js,所以我想一个模块可以完成这项工作,但到目前为止我找不到任何东西。
【解决方案2】:

您需要做的最重要的事情是转义传入的字符串以消除会破坏 JSON 的引号,这是我希望在 Node 中看到的唯一重大问题 - browsers have a slightly harder time。根据您的输入,您正在查看如下内容:

   var string = <mail_body><html> html code here...<html><mail_body> 
   var mail_body = string.split("<mail_body>")[1]
   mail_body = mail_body.replace(/\"/g, '\\"'); // regex for global replace, have to escape quotes

这应该会为您提供一个不会意外结束并破坏 JSON 其余部分的邮件正文。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-18
    • 1970-01-01
    • 1970-01-01
    • 2021-01-02
    相关资源
    最近更新 更多