用正斜杠替换向后斜杠Javascript

时间:2016-06-18 11:11:08

标签: javascript

我使用Backward Slashes从API获取一些图片,当我尝试在我的页面上显示这些图片时,它在Chrome上工作正常,但在其他浏览器如FireFox和IE上它无法正常工作一些谷歌搜索我知道我必须通过正斜杠传递URL,所以我尝试更换它,但它没有工作..

以下是我尝试过的代码......

输入

var test ="http:\\www.xyz.com\xy\ab\1324\1324.jpg";
var final = test.replace(/\\/g,"/");

输出

http:/www.xyz.comxyab13241324.jpg

请告诉我哪里出错了, 谢谢

3 个答案:

答案 0 :(得分:1)

这是不可能的 - 使用提供的example-string或类似的东西。

\x 是第一个问题。 JavaScript认为这是 十六进制转义序列 ,这就是JavaScript-Interpreter抛出适当错误的原因:

  

Uncaught SyntaxError:无效的十六进制转义序列

即使我们采用另一个示例字符串:'http:\\www.xyz.com\yy\ab\1324\1324.jpg',它也会失败 JavaScript认为反斜杠是为了逃避 八进制转义序列 之类的东西 - 这就是为什么只需将此字符串输入JS-Console并点击返回就会返回:

  

" HTTP:\ www.xyz.comyyabZ4Z4.jpg"

要进行可视化,请进入您的控制台:'http:\\www.xyz.com\yy\ab\1324\1324.jpg'.split('');

您会看到即使\132转换为Z也是如此。

我现在尝试了很多东西,比如替换/转义,尝试JSON.stringify,使用文本节点,在虚拟XML文档中使用CDATA等等 - 没有任何效果。 如果有人发现了这样做的JavaScript方式,我很乐意了解它!

结论

我不知道在JavaScript中如何做到这一点。似乎没有机会。

我认为你唯一的解决办法就是在服务器端逃避 在您的情况下,您将不得不编写一个小的服务器脚本,它调用您使用过的API并转换/转义所有内容,为您的JS做好准备。而你的JS称这个小服务器脚本。

答案 1 :(得分:0)

它可以正常使用反斜杠。

var test ="http:\\\\www.xyz.com\\xy\\ab\\1324\\1324.jpg";
var final = test.replace(/\\/g,"/");

console.log(final);

答案 2 :(得分:0)

猜测拼凑所有这些东西:

  1. Sebastian是正确的,因为像var test ="http:\\www.xyz.com\xy\ab\1324\1324.jpg";这样的东西不是有效的HTML。
  2. 但是,javascript中没有API实际上很容易让您创建这样的字符串。那么,真正的问题是字符串来自何处?如果它是某种缓冲区被解码,那么你的问题就在于那个库,无论它在哪里。鉴于必须在某处使用javascript,最好的办法是在运行时修改源代码或修补它。
  3. 我的蜘蛛侠意识告诉我你的变量是一个正确的字符串,如果插入你的真实代码你的正则表达式将正常工作。但是,对于您的测试用例,创建带有\字符的字符串,您必须将其转义,因此您需要var test = http:\\\\www.xyz.com
  4. 检查工作的一种方法是使用JSON.stringify来提供输入源代码所需的实际值。 E.g:

    var test = 'http:\\\\xyz.com';
    console.log(test); // prints "http:\\xyz.com"
    console.log(JSON.stringify(test)); // prints "http:\\\\xyz.com"