【问题标题】:How do I URl encode something in Node.js?我如何在 Node.js 中对某些内容进行 URl 编码?
【发布时间】:2011-09-27 02:20:07
【问题描述】:

我想对这个进行 URL 编码:

SELECT name FROM user WHERE uid = me() 

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

【问题讨论】:

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

标签: javascript url node.js


【解决方案1】:

你可以使用 JavaScript 的encodeURIComponent:

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

给予

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

【讨论】:

  • 为了节省访问者的搜索次数,是的...decodeURIComponent 是您解码编码的 URI 的方式。不客气。
  • 它帮助我使用 NodeJS 用孟加拉语进行查询。谢谢!
【解决方案2】:

内置模块 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 处理。
  • 如果字符串包含 ' 或 " 字符则不会
【解决方案3】:

使用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() 使用,一般不希望直接使用。”
【解决方案4】:

请注意,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--。它不能作为网址使用,或者我错过了什么?
  • 查看http://examplé.org 中的第二个“e”,它不是ASCII 字符,应显示为punnycode
【解决方案5】:

encodeURIComponent(string) 会这样做:

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

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

see this one

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-09
    • 2011-08-30
    • 2013-04-02
    • 2022-10-21
    • 1970-01-01
    相关资源
    最近更新 更多