【问题标题】:Find the illegal character and remove it in JS在JS中找到非法字符并删除
【发布时间】:2016-03-12 04:17:41
【问题描述】:

我有一个响应 GET 并发送 JSON 数据的服务器。该数据还包含一些 html,下面的代码给了我一个Uncaught SyntaxError: Unexpected token ILLEGAL。现在我看到多个帖子说它可能与 \200B 有关,我认为它是.. 我试过 this post 并找不到这个角色.. 你能告诉我如何找到并删除它特点?此 html 来自 SQL 服务器,我有很多数据将具有相同的字符串并希望将其删除。

这是jfiddle,当您运行时,您会收到错误消息。

如果我查看我的 mssql 数据库(当我在控制台 this.model.toJSON().body 中打印时),我会看到以下内容:

<p>Lorem Ipsum</p>
<p>Lorem Ipsum</p>

<strong>Tweet this article out</strong></span><br><br>

<a href="https://twitter.com/share" class="twitter-share-button" data-text="I 25 by @oberz" data-via="Atdsfm" data-size="large">Tweet</a>
<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?\'http\':\'https\';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+\'://platform.twitter.com/widgets.js\';fjs.parentNode.insertBefore(js,fjs);}}(document, \'script\', \'twitter-wjs\');</script>
<p> More html stuff</p>

这是this.model.toJSON() 在控制台上的样子..(body 键有我上面列出的 html):

Object {id: "former-obama-religion-adviser-speaks-at-event", authorbio: "sdflkd", organization_slug: null, body: "*html shown above*", author_image_url: "", cost: ""…}

【问题讨论】:

  • Twitter 小部件代码与您的问题有什么关系?
  • 我相信 U200B 存在于那段代码中。如果我删除该代码,我不会收到错误消息。我更新了问题以使其更清楚。
  • 您的代码中充满了不属于的反斜杠。
  • 所以您收到了一个 JSON 响应,其中包含 &lt;script&gt;...&lt;/script&gt; 作为字符串值?那些转义字符在字符串插值中幸存下来?还是您只是从网络面板的响应中复制相关的 sn-p?
  • 是的,我收到了一个 JSON 响应,其中包含该 作为字符串值。在我在控制台上这样打印出来之后,这段代码来自网络窗格.. this.model.toJSON().body。当我检查这个 sn-p 所在的数据库时,这个 sn-p 看起来是一样的

标签: javascript jquery html json unicode


【解决方案1】:

所以,根据你的 cmets,你得到的结果是这样的:

{"script":"<script>!function(d,s,id){var js,fjs=d.getElementsByTagName(s)[0],p=/^http:/.test(d.location)?\'http\':\'https\';if(!d.getElementById(id)){js=d.createElement(s);js.id=id;js.src=p+\'://platform.twitter.com/widgets.js\';fjs.parentNode.insertBefore(js,fjs);}}(document, \'script\', \'twitter-wjs\');</script>"}

在这种情况下,当 JS 解包 JSON 响应并为您提供一个完整的对象时,这些反斜杠应该会消失。您可以尝试在 AJAX 回调/处理程序中放置一个断点并检查该对象的内容及其值。

但是,如果您尝试从响应文本流中复制粘贴此代码(例如从网络面板或通过直接从浏览器的地址栏加载请求),它将不起作用,因为这些转义字符不应该在那里。它们仅在字符串文字中是合法的(即,当被引号包围时)。

【讨论】:

  • 如果我遗漏了什么,我深表歉意,但我更新了我的问题以提供更多数据..
  • 我认为我的答案仍然是您所需要的。问题是您试图手动将转义字符串注入到引号破坏事物的上下文中,而不是让 JS 自己做事。请记住,转义字符是跨上下文携带字符串值所必需的,因此,如果您看到的内容包含转义字符,例如 \n\",它们仅用于将文本作为字符串从一个位置移动到另一个位置。一旦你使用了JSON.parse()(或者把事情留给你正在使用的任何AJAX库),你得到的对象将不再有那些转义字符。
  • 你的回答让我发现了真正的问题——存储在 sql db 中的数据被转义了.. 可能是错误的
猜你喜欢
  • 2022-11-21
  • 1970-01-01
  • 1970-01-01
  • 2020-10-14
  • 1970-01-01
  • 2011-03-31
  • 1970-01-01
  • 2017-07-02
  • 2012-05-25
相关资源
最近更新 更多