这是什么类型的字符串/ URL编码?

时间:2018-04-12 01:05:00

标签: url encoding

给出一个

的示例输入字符串
ABCDabcd_1234_!_@_#_$_%_^_&_*_(_)_+

我看到

的输出
ABCDabcd_1234_!_@040_@023_$_@025_^_@026_*_@028_@029_@02b

我需要能够重现它,但第一步是确定它实际上是什么。它看起来类似于URL编码(并且在将表单数据传递到服务器时使用它),但存在一些差异。请求标头中的内容类型只显示application/x-www-form-urlencoded

1 个答案:

答案 0 :(得分:1)

它只是unicode。字符被编码为自身,或"@0"加上该字符的unicode单元,具有一些未知逻辑,用于是否编码。 application/x-www-form-urlencoded仅表示表单的值被编码为键值对,键和值由=分隔,对以&分隔。

如果您根本无法找到有关此编码的任何文档,您可以通过尝试所有字符来确定编码哪些字符,然后在javascript中重现它:

function encode(str) {
  let encodedString = '';
  const encodeThese = ['@', '#', '%', '&', '(', ')', '+'];

  for (char of str) {
    if (encodeThese.includes(char)) {
      encodedString = encodedString.concat('@0'.concat(char.charCodeAt()
                                                           .toString(16)));
    } else {
      encodedString = encodedString.concat(char);
    }
  }
  return encodedString;
}