【问题标题】:NodeJS escaping back slashNodeJS转义反斜杠
【发布时间】:2017-04-25 12:01:10
【问题描述】:

我遇到了一些转义反斜杠的问题,下面是我尝试过的代码 sn-p。问题是如何将带有转义斜杠的变量分配给另一个变量。

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 中,我们也用两个斜杠转义了该值。

【问题讨论】:

  • 很可能控制台正在转义字符串,因为 .. 它比替代方案更好。
  • @JanDvorak 谢谢,但我真的很抱歉没有得到你的确切信息。
  • 您确定您的代码正确吗?运行它会给我一个错误,因为wsdl_headers 在选项中不存在。
  • 请通过运行以下代码检查options.wsdl_headers.user的类型。 console.log('type', typeof options.wsdl_headers.user);
  • 更新代码以删除对wsdl_headers的引用

标签: javascript node.js escaping backslash


【解决方案1】:

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

【讨论】:

  • 谢谢,但是我将如何在 API 服务中使用值为 `\` 的对象,因为数据按原样传递,抛出 401 错误。
  • 您已经正确地转义了反斜杠。您的 API 错误状态的原因很可能在其他地方。
  • 但是 API 对象返回 error response 消息和 value 我通过了,因为我可以看到 user property 值有 two slash。但是,当我尝试使用相同的用户值对 PHP code 进行相同操作时,它会给出正确的响应,在 PHP 中,我们也是 escaping 的值与 two slashes
【解决方案2】:

输出是正确的。

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

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

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

(以下问题编辑:)

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

var s = 'domain\\\\user'

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

【讨论】:

  • 已更新以反映提及消费 SOAP 服务的问题编辑。
猜你喜欢
  • 2015-05-19
  • 2015-09-21
  • 2011-11-09
  • 2017-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多