【问题标题】:Cross Platform Url Encoding for Query Strings查询字符串的跨平台 URL 编码
【发布时间】:2015-07-01 10:48:27
【问题描述】:

在不同的编程语言中有多个类和函数用于对字符串进行编码和解码以使 URL 友好。例如

在java中

URLEncoder.encode(String, String)

在 PHP 中

urlencode ( string $str )

还有……

我的问题是,如果我在 java 中对字符串进行 UrlEncode,我可以期望其他语言中的其他不同 UrlDecoders 解码为相同的原始字符串吗?

我正在创建一个需要在查询字符串中编码一些 Base64 值的服务,但我不知道服务对象是谁。 请考虑我在这里唯一的选择似乎是查询字符串。我不能使用 xml 或 json 或 HTTP 标头,因为我需要将其放在要重定向的 url 中。 我环顾四周,有一些问题与此一模一样,但没有一个问题有正确的答案。 我非常感谢任何承认或任何解决方案。

编辑:

例如在PHP Manual中有这样的描述:

返回一个字符串,其中包含除 -_ 之外的所有非字母数字字符。已替换为百分号 (%) 后跟两个十六进制数字和编码为加号 (+) 的空格。它的编码方式与 WWW 表单中发布的数据的编码方式相同,即与 application/x-www-form-urlencoded 媒体类型中的方式相同。这与 » RFC 3986 编码(参见 rawurlencode())的不同之处在于,由于历史原因,空格被编码为加号 (+)。

听起来它不遵循 RFC

【问题讨论】:

    标签: url encoding cross-platform decoding


    【解决方案1】:

    听起来 url 编码器可以使用不同编程语言中的各种算法。

    但是应该为每个函数寻找编码模式。例如其中一个可能是

    应用程序/x-www-form-urlencoded

    查看 JAVA Url 编码器:

    使用特定的编码方案将字符串转换为 application/x-www-form-urlencoded 格式。此方法使用提供的编码方案来获取不安全字符的字节。

    也在研究 PHP 的

    这与 application/x-www-form-urlencoded 媒体类型中的方式相同

    因此,如果您正在寻找跨平台 URL 编码,您应该告诉您的用户您的编码器的格式是什么。 这样,他们可以找到合适的解码器,或者他们可以实现自己的解码器。
    经过一番调查,听起来 application/x-www-form-urlencoded 是最受欢迎的。

    【讨论】:

      猜你喜欢
      • 2011-06-16
      • 1970-01-01
      • 2012-06-02
      • 2011-11-04
      相关资源
      最近更新 更多