我如何在Node.js中编码一些东西?

我想对这个URL进行编码:

SELECT name FROM user WHERE uid = me() 

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

你可以使用JavaScript的encodeURIComponent

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

内置的模块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()' 

使用querystringescape函数。 它会生成一个URL安全string。

 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' 

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

如果您计划稍后将string用作查询string,则这是正确的:

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

上面的解决scheme工作,但不编码包含字符“或”的查询。

 function encodeSQLInjection(query){ return encodeURIComponent(query).replace(/'/g,"%27").replace(/"/g,"%22"); } encodeSQLInjection("DELETE FROM users WHERE name LIKE '%noob%'")