我想对这个进行URL编码:
SELECT name FROM user WHERE uid = me()
我需要下载一个模块才能实现这个功能吗?我已经有了request模块。
我想对这个进行URL编码:
SELECT name FROM user WHERE uid = me()
我需要下载一个模块才能实现这个功能吗?我已经有了request模块。
你可以使用JavaScript的encodeURIComponent
函数:
encodeURIComponent('select * from table where i()')
提供
'select%20*%20from%20table%20where%20i()'
decodeURIComponent
是用来解码已编码的URI的。不客气。 - KyleFarris你要找的是内置模块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()'
使用 querystring
的 escape
函数,它会生成一个安全的 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()
(在Nicolas的回答中)现在似乎返回一个空字符串。 - brandonscriptquerystring.escape()
方法被 querystring.stringify()
使用,通常不建议直接使用。" - Simon Hänisch请注意,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'
encodeURIComponent(string) 就可以了:
encodeURIComponent("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"
⚠️ 将 SQL 作为查询字符串传递可能并不是一个好计划:请看这个
encodeURI() 方法用于编码完整的 URL。该方法会编码特殊字符,但不包括 ~!$&@#*()=:/,;?+
。
如果要编码 URI 组件中的特殊字符,应使用 encodeURIComponent() 方法。该方法适用于编码 URL 组件,如查询字符串参数,而不是完整的 URL。