查询字符串的跨平台 Url 编码

Cross Platform Url Encoding for Query Strings

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

在java

URLEncoder.encode(String, String)

在PHP

urlencode ( string $str )

还有...

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

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

编辑:

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

Returns a string in which all non-alphanumeric characters except -_. have been replaced with a percent (%) sign followed by two hex digits and spaces encoded as plus (+) signs. It is encoded the same way that the posted data from a WWW form is encoded, that is the same way as in application/x-www-form-urlencoded media type. This differs from the » RFC 3986 encoding (see rawurlencode()) in that for historical reasons, spaces are encoded as plus (+) signs.

这听起来不符合 RFC

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

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

application/x-www-form-urlencoded

调查 JAVA Url 编码器:

Translates a string into application/x-www-form-urlencoded format using a specific encoding scheme. This method uses the supplied encoding scheme to obtain the bytes for unsafe characters.

也在调查PHP的

that is the same way as in application/x-www-form-urlencoded media type

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