NodeJS逃避斜线

时间:2017-04-25 12:01:10

标签: javascript node.js escaping backslash

我面临一些逃避反斜杠的问题,下面是我尝试过的代码片段。问题是如何将带有转义斜杠的变量分配给另一个变量。

var s = 'domain\\username';
var options = {
    user : ''
};
options.user =  s;

console.log(s); // Output : domain\username - CORRECT
console.log(options); // Output : { user: 'domain\\username' } - WRONG

为什么我打印options对象两个斜杠即将来临?

我觉得我在这里做了一些非常/非常错误的事情,这可能是基础知识。

更新:

当我使用此对象options时,值正在原样传递(使用双斜杠),并且我将此与我的SOAP服务一起使用,并且由于无效的用户属性值而导致401错误。

但是当我使用相同的用户值尝试使用相同的用户值时,它给出了正确的响应,在PHP中我们也用两个斜线来逃避该值。

2 个答案:

答案 0 :(得分:2)

输出正确。

设置变量时,转义的反斜杠会被解释为单个代码点。

但是,options是一个对象,在记录时会显示为JSON blob。此时反斜杠会重新转义,因为这是反斜杠在JSON输出中作为字符串值有效出现的唯一方法。

如果您将console.log(options)中的JSON输出重新读入javascript(使用JSON.parse()或类似内容),然后输出用户密钥,则只显示一个反斜杠。

(以下问题编辑:)

为了让您的数据被SOAP使用服务接受,数据可能需要在带内显式转义。在这种情况下,您需要在分配值时双重转义:

var s = 'domain\\\\user'

为了明确确定您是否需要这样做,我建议您在工作的PHP应用程序和SOAP应用程序之间设置代理,并检查流量。

答案 1 :(得分:2)

当你console.log()一个对象时,它首先使用util.inspect()转换为字符串。 util.inspect()将字符串属性值格式化为文字(非常类似于JSON.stringify(s)),以更轻松/准确地显示字符串(可能包含\n等控制字符)。这样做,它必须转义字符串中的某些字符,以便它们是有效的Javascript字符串,这就是为什么你看到反斜杠转义为你的代码中的原因。