【问题标题】:Encode a string for sending with HTTP request?编码一个字符串以使用 HTTP 请求发送?
【发布时间】:2011-02-24 02:57:57
【问题描述】:

我使用的是 Javascript/Node.js,当我使用此查询参数发出 HTTP 请求时:

?key="https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-#a6e6f"

我收到一个错误,因为它存储了之后的所有内容:

?key="https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-

我想知道如何对这个字符串进行编码,这样它就不会被切断?

【问题讨论】:

    标签: javascript node.js encode


    【解决方案1】:

    我假设 URL 末尾的井号 (#) 实际上是查询参数的一部分。问题在于 Node.js 将其视为整个 URL 的哈希值,这在 HTTP 请求中不起作用。因此,您需要正确编码查询字符串。

    querystring.stringify 这样的结构化 API 函数可能是最好的。

    var query = querystring.stringify({
      key: '"https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-#a6e6f"'
    });
    

    【讨论】:

    • 或许你可以试试:?key="me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-" + encodeURIComponent("#a6e6f"); ?
    • Kevin Gurney:实际上效果很好! encodeURI 和 encodeURIComponent 有什么区别?
    • 刚刚阅读了一个解释:stackoverflow.com/questions/75980/… :) 你应该把你的评论作为答案,这样我就可以把它变成被接受的。
    • 也许只有我一个人,但我认为选择性地只编码查询参数的一部分是一个脆弱的解决方案......
    【解决方案2】:

    对它进行urlencode。

    在 Javascript 中:escape(string)

    【讨论】:

    • escape 在 NodeJS 上不存在。在客户端 Javascript 中,它已被弃用,因为它不适用于非 ASCII 字符。请改用encodeURIencodeURIComponent
    【解决方案3】:

    使用 encodeURIComponent 就像赫斯基在评论中提到的那样。

    ?key=encodeURIComponent(https://me.yahoo.com/a/xt4hQ7QYssA8hymJKv8MeVQQKGhq_1jwvas-#a6e6f)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-05-13
      • 2014-04-12
      • 2017-07-22
      • 1970-01-01
      • 1970-01-01
      • 2012-05-11
      • 1970-01-01
      • 2022-11-30
      相关资源
      最近更新 更多