在JavaScript中从字符串中移除“\”

3

我在Javascript中遇到了一些去除斜杠的问题。

我通过JSON获取了一些HTML并且需要去掉转义字符中的斜杠。

这是我现在所拥有的,但它似乎根本不起作用...

obj.embed_code = obj.embed_code.replace(/\\/g, '');

对象中的HTML是来自YouTube的嵌入式iframe,但由于它有转义引号,我最终得到的是一个带有404页面的iframe。

正确的方法是什么?

以下是输出样例...

<iframe width=\\\"420\\\" height=\\\"315\\\" src=\\\"http:\/\/www.youtube.com\/embed\/MD61itbPNEY\\\" frameborder=\\\"0\\\" allowfullscreen><\/iframe>

此外,这是获取JSON的页面,您可以看到原始数据长什么样子... http://bit.ly/UxuvfL

4
为什么要使用正则表达式来进行简单的替换?x = str.replace('\\')。建议翻译:为什么在这个简单的替换中要使用正则表达式?x = str.replace('\\') - Marc B
3
@MarcB,使用字符串替换只会替换第一个实例,这就是 RegExp 上 g 标志的作用。 - zzzzBov
1
那段代码应该可以直接运行。问题可能出在其他地方。请使用jsfiddle创建一个简化的测试用例(假设预期结果是删除“\”字符)。 - zzzzBov
好的,我已经根据你的字符串修改了我的答案。那应该可以工作了。但是我想知道所有的斜杠是从哪里来的... - PiTheNumber
据我所知,其中一个是在插入mysql时产生的(尽管在提取时应该被删除...),另一个是在JSON编码时产生的,但还有一个我无法解释。我不太确定。 - user1146223
显示剩余6条评论
3个回答

1
如果数据确实是JSON格式,那么使用JSON解析器才是正确的方法,因为JSON解析不仅仅是去掉反斜杠那么简单。例如:
{"content":"<p>CleverStuff\u2122<\/p>"}

JSON.parse(theData).content 会给你返回:

<p>CleverStuff™</p>

0

尝试

obj.embed_code = obj.embed_code.replace(/\\\//g, "/");

它匹配\/,因此您不会意外删除未转义的/实例


-1
你的JSON格式是有效的,我用jsonlint.com进行了检查。
这将清理embed_code:
obj.embed_code = obj.embed_code.replace(/\\\\\\"/g, '"').replace(/\\\//g, "/");

对我来说很好用:

> var a = "width=\\\\\\\"420 src=\\\\\\\"http:\\/\\/www"
"width=\\\"420 src=\\\"http:\/\/www"
> a.replace(/\\\\\\"/g, '"').replace(/\\\//g, "/")
"width="420 src="http://wwww"

但我建议这样做:

$.getJSON('http://webiwave.com/includes/checkForButton.php?id=922', function (data){
    console.log(data.embed_code.replace(/\\\"/g, '"') ) 
});

如果我在您的网页上运行此代码,将会得到干净的HTML:
<iframe width="420" height="315" src="http://www.youtube.com/embed/MD61itbPNEY" frameborder="0" allowfullscreen></iframe>

我编辑了我的答案几次,所以不要被旧的负评吓到。 - PiTheNumber

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接