我面临一些逃避反斜杠的问题,下面是我尝试过的代码片段。问题是如何将带有转义斜杠的变量分配给另一个变量。
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中我们也用两个斜线来逃避该值。
答案 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字符串,这就是为什么你看到反斜杠转义为你的代码中的原因。