跳转到主要内容
CuteJSON
↑↓ 导航 Enter 选择 Esc 关闭

如何为查询字符串URL编码JSON

发布 1 分钟阅读 作者 Akash Kinkar Pandey

URL无法以当前形式携带JSON文档。大括号、引号、空格和ASCII以上的 所有字符在进入查询字符串或路径段之前都必须进行百分比编码。

使用JSON URL编码器和解码器

选择编码或解码,粘贴您的文档,然后按转换。编码遵循与 URIComponent相同的规则:安全集之外的每个UTF-8字节都变成 %XX转义。

{"q":"a b+c","clef":"𝄞"}

编码为%7B%22q%22%3A%22a%20b%2Bc%22%2C%22clef%22%3A%22%F0%9D%84%9E%22%7D, 与encodeURIComponent为相同文档生成的结果完全匹配,包括音乐 符号𝄞作为四个单独的%XX转义,因为它在UTF-8中占用四个字节。

唯一选项,以及为什么存在

启用“空格是加号”,相同文档将空格编码为+而不是%20,而数据中 已有的字面量+仍然变成%2B。这个区别就是为什么这是一个切换 而不是假设的全部原因:URL的查询字符串和表单提交对裸露+的含义 意见不一致。在表单正文中,+表示空格。在URL的任何其他部分中, +是字面量加号。错误猜测会将数据中的每个加号变为空格,或将每个 编码的空格留为字面量加号,这是编码文档在另一端悄悄损坏的最常见 方式之一。

解码,以及为什么它在一次传递中发生

解码收集整个字符串中每个百分比转义的字节,并在最后一次性将它们 解码为UTF-8,而不是一次解码一个转义。像emoji这样的多字节字符 作为序列中的多个单独%XX转义到达,因此单独解码每个并将其视为 自己的字符会将一个emoji转换为多个替换字符。在最后解码一次是保持 多字节文本完整的方法,它还允许不是有效UTF-8的字节作为自己的 失败类型报告,这与百分比符号后没有有效十六进制数字不同, encodeURIComponent无法自行区分。

往返过程

使用“空格是加号”编码上述示例然后解码回来,返回完全相同的原始 文档,"a b+c"和音乐符号都完整,这是加号和空格处理在两个方向 上一致的真正测试。

返回所有文章