如何格式化带有多个问号的url并确保使用最后一个查询字符串

use*_*912 6 javascript url node.js query-string

在我的node.js应用程序中,我正在使用一个接受调用的API,如下所示

\n\n
http://myapi.com/action?url= https://www.test.com/play?action=jump\n
Run Code Online (Sandbox Code Playgroud)\n\n

然后根据传入 URL 参数的参数(例如 \xe2\x80\x93 \xe2\x80\x98action=jump\xe2\x80\x99),API 返回特定响应。

\n\n

我遇到的问题是,在某些情况下,发送到 API 的 URL 可能已经带有带有查询字符串的问号(?song=portrait)

\n\n
http://myapi.com/action?url= https://www.test.com/play?song=portrait?action=jump\n
Run Code Online (Sandbox Code Playgroud)\n\n

在这种情况下,API 会发回不正确的响应,因为它\xe2\x80\x99s 使用查询字符串中的第一个问号参数。例子?song=portrait

\n\n

在不修改 API 的情况下,如何确保 API 读取末尾的参数 - 例如 \xe2\x80\x93action=jump

\n\n

有没有办法避开第一个问号,同时保留有效的 URL 或者我如何使用url.format()url.parse()解决这个问题

\n\n

我忘记补充一点,我已经对传递到 URL 参数中的 URL 进行了编码。

\n

luc*_*son 3

您应该使用encodeURIComponent(在浏览器和节点中工作)。

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/encodeURIComponent