Form表单传递参数的编码问题

2016-4-10 杜世伟 Php

工作中遇到后端接收前端数据,解析不正常通过分析原因如下:
如果前端在form表单提交的时候没有设置enctype属性,传递参数的时候最终以 application/x-www-form-urlencoded方式提交数据,这样传递的参数都进行了urlencode转码。正常情况下后端接收到的参数其实需要urldecode进行解码。由于前端传递参数的过程中没有对任何参数做过特殊处理,但是后端在接收有些参数是使用rawurldecode进行解码的(urldecode和rawurldecode对空空格号的处理方式不一样)。这个原因导致了后端数据解析失败

urlencode和rawurlencode两个方法在处理字母数字,特殊符号,中文的时候结果都是一样的,唯一的不同是对空格的处理,urlencode处理成“+”,rawurlencode处理成“%20”。

urlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数,空格则编码为加号(+)。此编码与 WWW 表单 POST 数据的编码方式是一样的,同时与 application/x-www-form-urlencoded 的媒体类型编码方式一样。由于历史原因,此编码在将空格编码为加号(+)方面与 RFC1738 编码(参见 rawurlencode())不同。

rawurlencode:返回字符串,此字符串中除了 -_. 之外的所有非字母数字字符都将被替换成百分号(%)后跟两位十六进制数。这是在 RFC 1738 中描述的编码,是为了保护原义字符以免其被解释为特殊的 URL 定界符,同时保护 URL 格式以免其被传输媒体(像一些邮件系统)使用字符转换时弄乱。

标签: PHP urlencode rawurldecode

Powered by emlog 沪ICP备2023034538号-1