ChatGPT解决这个技术问题 Extra ChatGPT

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

我想对这个进行 URL 编码:

SELECT name FROM user WHERE uid = me() 

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

事实上,这是一条滑坡,应该不惜一切代价避免。
你想把 SQL 语句放在你的 url 中吗???小心SQL Injection Attack!将 SQL 暴露给用户通常是个坏主意,这真的很危险。
@LightnessRacesinOrbit:看起来像一个 FQL 查询。
@黛米:不是吗?那将如何工作。即使每个 SO 用户都有自己的 DB 帐户,DBMS 权限也不够细。告诉我你在哪里看到直接传递的 SQL 查询?一个例外是数据资源管理器,但这都是只读视图,而且肯定不会放在 URL 中。
这家伙可能正在构建一个 SQL 验证工具,在这样的示例中传递 SQL 命令并没有错。过于关注不回答问题,也没有给出好的建议(最受好评的评论没有给出好的建议,只会取笑 OP)

B
Brian Burns

您可以使用 JavaScript 的 encodeURIComponent

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

给予

'select%20*%20from%20table%20where%20i()'

为了节省访问者的搜索,是的... decodeURIComponent 是您解码编码的 URI 的方式。别客气。
它帮助我使用 NodeJS 用孟加拉语进行查询。谢谢!
n
nicolaskruchten

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

在这种情况下,我们只能传递一个映射而不是一个字符串,所以如果 arg 是一个字符串,那么您将看不到任何结果。因此,如果您有要编码的字符串,请使用 encodeURIComponent()。
这更适合对 JSON 对象进行编码和 POST 处理。
如果字符串包含 ' 或 " 字符,则不是
P
Peter Mortensen

使用 querystringescape 函数。它生成一个 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 的回答中)现在似乎返回了一个空字符串。
nodejs.org/api/… 说:“querystring.escape() 方法由 querystring.stringify() 使用,通常不会直接使用。”
F
Flimm

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

我不明白为什么在第二个示例中添加了 xn--。它不能作为 url 工作,或者我错过了什么?
查看 http://examplé.org 中的第二个“e”,它不是 ASCII 字符,应显示为 punnycode
J
John Culviner

encodeURIComponent(string) 会这样做:

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

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

see this one


M
Milkncookiez

编码URI

encodeURI() 方法用于对完整的 URL 进行编码。此方法对除 ~!$&@#*()=:/,;?+ 之外的特殊字符进行编码

编码URI组件

要对 URI 组件中的特殊字符进行编码,您应该使用 encodeURIComponent() 方法。此方法适用于编码 URL 组件,例如查询字符串参数,而不是完整的 URL。