我如何在Node.js中URl编码?


314

我想对此进行网址编码:

SELECT name FROM user WHERE uid = me() 

我需要为此下载一个模块吗?我已经有了请求模块。


8
确实,这是一条坎slip的路,应不惜一切代价避免。
阿尔弗雷德

19
您是否要在网址中放置SQL语句???注意SQL注入攻击!向用户公开SQL通常是一个坏主意,这确实很危险。
Leonmax 2012年

4
@LightnessRacesinOrbit:看起来像一个FQL查询。
nikc.org 2012年

2
@Demi:不?那将如何工作。即使每个SO用户都有自己的数据库帐户,DBMS权限也不够细致。告诉我在哪里可以看到直接传递SQL查询?数据浏览器是一个例外,但是它是所有只读视图,并且肯定不会放在URL中。
Lightness Races in Orbit

17
这个家伙可能正在构建一个SQL验证工具,在这样的示例中传递SQL命令没有错。过多地关注不回答问题也不要给出好的建议(最受批评的评论没有给出好的建议,只会取笑OP)
Rafael Eyng

Answers:


597

您可以使用JavaScript的encodeURIComponent

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

31
要保存访问者的搜索信息,是的... decodeURIComponent是您解码编码的URI的方式。别客气。
KyleFarris

125

内置模块querystring是您要寻找的:

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()'

4
在这种情况下,我们只能传递映射而不是字符串,因此,如果arg是字符串,那么您将看不到任何结果。因此,如果您有要编码的字符串,请使用encodeURIComponent()。
Ankit Patial

1
这对于编码JSON对象并对其进行发布更好。
亚历克斯W

如果字符串包含'或'字符
不会-Jkarttunen

47

使用的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'

1
这显然是正确的功能;querystring.stringify()(用Nicolas的答案)似乎现在返回一个空字符串。
brandonscript

4
nodejs.org/api/…说:“该querystring.escape()方法由使用,querystring.stringify()通常不应直接使用。”
SimonHänisch'17

17

请注意,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'

12

encodeURIComponent(string)可以做到:

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

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

看到这个

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.