Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/475.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何在Node.js中对某些内容进行URl编码?_Javascript_Url_Node.js - Fatal编程技术网

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

Javascript 如何在Node.js中对某些内容进行URl编码?,javascript,url,node.js,Javascript,Url,Node.js,我想对其进行URL编码: SELECT name FROM user WHERE uid = me() 我必须为此下载一个模块吗?我已经有了请求模块。您可以使用JavaScript的: 给予 'select%20*%20from%20table%20where%20i()' 您需要的是内置模块: var querystring = require("querystring"); var result = querystring.stringify({query: "SELECT name

我想对其进行URL编码:

SELECT name FROM user WHERE uid = me() 
我必须为此下载一个模块吗?我已经有了请求模块。

您可以使用JavaScript的:

给予

'select%20*%20from%20table%20where%20i()'
您需要的是内置模块:

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'

请注意,URI编码对查询部分很好,但对域不好。域使用punycode进行编码。您需要一个类似于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字符,请改用:

但是,对于其他用例,您可能需要:

编码器组件(字符串)将执行以下操作:

encodeURIComponent("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"
但是,在查询字符串中传递SQL可能不是一个好的计划


事实上,这是一条不平坦的道路,应该不惜一切代价避免。您是否试图在url中添加SQL语句???当心那辆车!向用户公开SQL通常不是一个好主意,这真的很危险。@LightnessRacesinOrbit:看起来像FQL查询。@Demi:不是吗?那怎么行呢。DBMS权限不够细粒度,即使每个SO用户都有自己的DB帐户。告诉我在何处打开以便看到直接传递的SQL查询?唯一的例外是data explorer,但这都是只读视图,而且肯定没有放在URL中。这家伙可能正在构建SQL验证工具,在这样的示例中传递SQL命令没有什么错。太多的注意力放在不回答问题上,也没有给出好的建议(投票最多的评论不会给出好的建议,只是取笑OP)在这种情况下,我们只能传递一个映射而不是字符串,所以如果arg是字符串,那么您将看不到任何结果。因此,如果您有字符串要编码,请使用encodeURIComponent()。这对于编码JSON对象和发布它们来说是更好的。如果字符串包含“或”字符,则不会这样做。这显然是正确的函数;
querystring.stringify()
(在Nicolas的回答中)现在似乎返回空字符串。例如:“the
querystring.escape()
方法由
querystring.stringify()
使用,通常不希望直接使用。“要保存访问者的搜索,是的…
decodeURIComponent
是解码编码URI的方式。欢迎使用。
> encodeURI("http://examplé.org/rosé?rosé=rosé")
'http://exampl%C3%A9.org/ros%C3%A9?ros%C3%A9=ros%C3%A9'
> 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("Robert'); DROP TABLE Students;--")
//>> "Robert')%3B%20DROP%20TABLE%20Students%3B--"