我如何在 Node.js 中对某些内容进行 URl 编码?

IT技术 javascript url node.js
2021-03-16 13:39:01

我想对这个进行 URL 编码:

SELECT name FROM user WHERE uid = me() 

我必须为此下载module吗?我已经有了请求module。

5个回答

您可以使用 JavaScript 的encodeURIComponent

encodeURIComponent('select * from table where i()')

给予

'select%20*%20from%20table%20where%20i()'
它帮助我使用 NodeJS 以孟加拉语查询。谢谢!
2021-05-05 13:39:01
为了让访问者免于搜索,是的...decodeURIComponent是您解码编码 URI 的方式。别客气。
2021-05-17 13:39:01

内置modulequerystring正是您要找的:

var querystring = require("querystring");
var result = querystring.stringify({query: "SELECT name FROM user WHERE uid = me()"});
console.log(result);
#prints 'query=SELECT%20name%20FROM%20user%20WHERE%20uid%20%3D%20me()'
这对于编码 JSON 对象和 POST-ing 它们更好。
2021-05-03 13:39:01
在这种情况下,我们只能传递地图而不是字符串,因此如果 arg 是字符串,那么您将看不到任何结果。因此,如果您有要编码的字符串,请使用 encodeURIComponent()。
2021-05-11 13:39:01
如果字符串包含 ' 或 " 字符,则不是
2021-05-11 13:39:01

使用 的escape功能querystring它生成一个 URL 安全字符串。

var escaped_str = require('querystring').escape('Photo on 30-11-12 at 8.09 AM #2.jpg');
console.log(escaped_str);
// prints 'Photo%20on%2030-11-12%20at%208.09%20AM%20%232.jpg'
这显然是正确的功能;querystring.stringify()(在尼古拉斯的回答中)现在似乎返回一个空字符串。
2021-05-10 13:39:01
nodejs.org/api/...说:“该querystring.escape()方法被使用,querystring.stringify()通常不会被直接使用。”
2021-05-20 13:39:01

请注意,URI 编码适用于查询部分,不适用于域。域使用 punycode 进行编码。您需要像URI.js这样的库来在 URI 和 IRI(国际化资源标识符)之间进行转换。

如果您打算稍后将该字符串用作查询字符串,则这是正确的:

> encodeURIComponent("http://examplé.org/rosé?rosé=rosé")
'http%3A%2F%2Fexampl%C3%A9.org%2Fros%C3%A9%3Fros%C3%A9%3Dros%C3%A9'

如果你不想ASCII字符喜欢做/:?进行转义,使用encodeURI来代替:

> encodeURI("http://examplé.org/rosé?rosé=rosé")
'http://exampl%C3%A9.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'

但是,对于其他用例,您可能需要uri-js

> var URI = require("uri-js");
undefined
> URI.serialize(URI.parse("http://examplé.org/rosé?rosé=rosé"))
'http://xn--exampl-gva.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'
看看里面的第二个“e”http://examplé.org不是 ASCII 字符,应该显示为punnycode
2021-04-21 13:39:01
我不明白为什么xn--在第二个例子中添加了。它不能用作 url 或者我错过了什么?
2021-05-14 13:39:01

encodeURIComponent(string) 会这样做:

encodeURIComponent("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"

虽然在查询字符串中传递 SQL 可能不是一个好的计划,

看到这个