给出一个
的示例输入字符串ABCDabcd_1234_!_@_#_$_%_^_&_*_(_)_+
我看到
的输出ABCDabcd_1234_!_@040_@023_$_@025_^_@026_*_@028_@029_@02b
我需要能够重现它,但第一步是确定它实际上是什么。它看起来类似于URL编码(并且在将表单数据传递到服务器时使用它),但存在一些差异。请求标头中的内容类型只显示application/x-www-form-urlencoded
。
答案 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;
}