【问题标题】:URL parsing issue : excluding '+' symbolURL 解析问题:不包括“+”符号
【发布时间】:2018-06-06 11:35:36
【问题描述】:

我有一个网址

viberpa://aafff+a@viber.com?phone_number=vv+9nc3pVg==&user_id=cc+9nc3pVg==

当我尝试使用以下示例代码解析 URL 时

//input code
const url = require("url");
 let uri = 'viberpa://aafff+a@viber.com?phone_number=vv+9nc3pVg==&user_id=cc+9nc3pVg==&token_created_time=2018-05-28T11:31:42.760Z'
 let uri_pasrse = url.parse(uri, true);
 console.log(uri_pasrse.query);

获取查询字符串:

{ phone_number: 'vv 9nc3pVg==',
  user_id: 'cc 9nc3pVg==',
  token_created_time: '2018-05-28T11:31:42.760Z' }

查询字符串不包括 + 符号。如何使用解析方法获取原始查询字符串或建议任何替代方法?

【问题讨论】:

  • 解析也意味着解码。也许你只是为了分割碎片?
  • +空格字符 的编码,如果打算使用 + 符号,则应将其编码为 %2b。如果您不能这样做,请考虑用另一个序列预先替换 +,解析然后替换回来。
  • + 是 URI 中的特殊字符,需要进行 URL 编码(如 %2B)。

标签: javascript node.js urlparse


【解决方案1】:

每个查询参数必须事先编码。在 javascript(本例中为 NodeJS)中,您可以使用 encodeURIComponent:

'use strict';

const url = require('url');
const uri = `viberpa://aafff+a@viber.com?phone_number=${encodeURIComponent('vv+9nc3pVg==')}&user_id=${encodeURIComponent('cc+9nc3pVg==')}&token_created_time=2018-05-28T11:31:42.760Z`;
const uri_parse = url.parse(uri, true);
console.log(uri_parse.query);

结果:

{ 
    phone_number: 'vv+9nc3pVg==',
    user_id: 'cc+9nc3pVg==',
    token_created_time: '2018-05-28T11:31:42.760Z'
}

【讨论】:

  • 使用encodeURIComponent 之类的东西会不会更合适,因为它会正确编码字符串而不是人类可读的
  • 是的,我正在为每个查询参数应用 encodeURIComponent。 NodeJS 中的其他选项是使用查询字符串包(转义方法)执行此任务
  • 我已经尝试在解析之前将查询参数转换为 base64 编码,所以它现在可以工作了。我认为它可以通过将其转换为 base64 或十六进制来工作。 let encodedUserId = Buffer.from(user_id).toString('base64');
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-16
  • 2011-01-20
  • 1970-01-01
  • 2013-07-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多