一、浏览器默认编码一般为 UTF-8;
二、URL 编码:
1、在URL中传递参数值:当在URL中传递参数值时,特殊字符可能会被解释为URL语法的一部分,而导致错误的行为。为了避免这种情况,可以对参数值进行URL编码,以确保它们只被解释为纯文本。
2、在表单中传递参数值:当通过表单提交数据时,特殊字符可能会被解释为HTML语法的一部分,而导致错误的行为。为了避免这种情况,可以对表单参数值进行URL编码,以确保它们只被解释为纯文本。
3、在HTTP请求头中传递参数值:HTTP请求头可以包含一些参数值,例如cookie、Referer等。这些参数值可能包含特殊字符,需要进行URL编码以确保它们只被解释为纯文本。
4、在HTTP响应头中传递参数值:HTTP响应头可以包含一些参数值,例如Location、Content-Disposition等。这些参数值可能包含特殊字符,需要进行URL编码以确保它们只被解释为纯文本。
三、php对于数据的转码:
在PHP编码为GBK的情况下,接收数据时,对于?id=1'和?id=1%df'会有以下不同:
1、对于?id=1',PHP会将其解析为包含单引号字符的字符串。在GBK编码下,单引号字符的字节表示为0x27。因此,PHP会将该字符串解析为"id=1'",其中单引号被正确地保留下来。
2、对于?id=1%df',PHP会将其解析为包含特殊字符的字符串。在GBK编码下,特殊字符%df的字节表示为0xDF。因此,PHP会将该字符串解析为"id=1\xDF",其中\x表示特殊字符的十六进制表示方式。
四、特殊字符在进入mysql之后会被转码,例如 '\' 会被转作 '%5c';
补充:
1、php 可以使用 iconv() 函数对编码进行转换:
$data = iconv('UTF-8', 'GBK', $_GET['data']);
//此例子中是把 utf-8 转为 GBK 格式
2、关于%df是几个字节的字符:
%df是一个URL编码中的字符转义序列,
表示一个字节的十六进制数0xDF,即十进制数223。
在UTF-8编码中,这个字节表示一个非ASCII字符,
而在GBK编码中,它表示一个汉字或其他非ASCII字符。
需要注意的是,UTF-8和GBK都是变长编码方式,一个字符可以由一个或多个字节组成。
在UTF-8中,一个汉字通常由3个字节组成,
而在GBK中,一个汉字通常由2个字节组成。
因此,如果%df前面或后面的字符也是非ASCII字符,
那么%df就不再表示一个单独的字符,而是与前面或后面的字符一起组成一个多字节字符。