NodeJS转义反斜杠

8

我在转义反斜杠方面遇到了一些问题,以下是我尝试过的代码片段。问题是如何将一个带有转义斜杠的变量赋值给另一个变量。

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代码时,可以得到正确的响应,在PHP中我们也用两个反斜杠转义该值。

很可能控制台正在转义字符串,因为这比其他方式更好。 - John Dvorak
@JanDvorak 谢谢,但是很抱歉我没有完全理解你的意思。 - Dipak
你确定你的代码是正确的吗?运行它会出现错误,因为wsdl_headers在选项中不存在。 - user3432422
请运行以下代码,检查 options.wsdl_headers.user 的类型。console.log('type', typeof options.wsdl_headers.user); - Junejo
更新代码,删除对 wsdl_headers 的引用。 - Dipak
2个回答

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

谢谢,但是我该如何在API服务中使用一个值为\\的对象,因为数据传递时会直接抛出401错误。 - Dipak
你已经正确地转义了反斜杠。你的 API 错误状态的原因很可能在其他地方。 - mscdex
但是 API 对象返回了一个带有我传递的值的 错误响应 消息,在其中我可以看到 用户属性 值有 两个斜杠。但是当我使用相同的用户值尝试使用 PHP 代码 进行相同操作时,它会给出正确的响应,在 PHP 中我们也使用 两个斜杠 对该值进行了 转义 - Dipak

3

输出结果是正确的。

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

然而,options 是一个对象,当记录在日志中时,它会显示为一个 JSON 数据块。此时反斜杠会被重新转义,因为这是反斜杠可以作为 JSON 输出中字符串值的有效方式。

如果您使用 JSON.parse() 或类似的方法将 console.log(options) 的 JSON 输出重新读入到 JavaScript 中,并输出用户键,则只会显示一个反斜杠。

(以下是修改后的问题:)

有可能 SOAP 消费服务需要明确地对数据进行编码才能接受数据。在这种情况下,当赋值时需要两次转义:

var s = 'domain\\\\user'

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

已更新以反映有关调用SOAP服务的问题编辑。 - Benjamin

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