php编码解码

来源:互联网 发布:java高级架构师视频 编辑:程序博客网 时间:2024/05/03 16:08

(一)MIME编码和解码

1base64_decode ()对使用 MIME base64 编码的数据进行解码

使用方式:string base64_decode ( string $encoded_data )

base64_decode() 对 encoded_data 进行解码,返回原始数据,失败则返回 FALSE

返回的数据可能是二进制的。

2base64_encode() 使用 MIME base64 对数据进行编码

使用方式:string base64_encode ( string $data )

base64_encode() returns 使用 base64 对 data 进行编码。

设计此种编码是为了使二进制数据可以通过非纯 8-bit 的传输层传输,

例如电子邮件的主体。

Base64-encoded 数据要比原始数据多占用 33% 左右的空间。

(二)URL编码和解码

1,(1urlencode:将字符串以URL编码

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

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

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

4,URLEncode是这样编码的 

①数字和字母不变。

②空格变为"+"号。

③其他被编码成"%"加上他们的ascii的十六进制,规律是这样的 

④urldecode:本函数将 URL 编码后字符串还原成未编码的样子。编码使用 %## 的格式。

2,(1urldecode:解码已编码的 URL 字符串

使用方式:string urldecode ( string str)

 解码给出的已编码字符串中的任何 %##。返回解码后的字符串。

(2)rawurldecode -- 对已编码的 URL 字符串进行解码

string rawurldecode ( string str)

 返回字符串,此字符串中百分号(%)后跟两位十六进制数的序列都将被替换成原义字符。

3rawurldecode() 不会把加号('+')解码为空格,而 urldecode() 可以。

 

(三)Form表单中的post提交:

1)编码:客户端所要传送的数据也要使用urlencode编码

Html文件中有<meta charset="utf-8" />(字符集utf-8gbk,post会使用此处指定的编码方式进行编码,所以这行代码要放在html的最前端,一是为了避免乱码,而是为了制定post提交数据的urlencode编码方式

(2)解码:服务器端(tomcat)如果使用默认缺省设置,也没有过滤器,则使用ISO-8859-1进行解码

(四)Get提交方式:

(1)编码:客户端把数据串放在请求的url后作为参数,如果出现中文或特殊字符,会乱码,所以,url拼接完成后,会进行url编码encode,在发送给服务器,(除英文外都要进行编码,避免乱码)

(2)Get方式的url编码方式是由浏览器决定的,不同的浏览器编码方式不同,一般,中文使用gbk,设置浏览器也可以使用utf-8,然后在使用ISO-8859-1的编码方式转换成二进制一起发送出去

(3)解码:服务器端先进行ISO-8859-1解码,(一般是,这是由服务器决定的)

(五)md5编码和解码--对一段信息message产生信息摘要message-digest,以防止被篡改

1md5将整个文件当作一个大文本信息,通过其不可逆的字符串变换算法,产生了这个唯一的md5信息摘要。如果在以后传播这个文件的过程中,无论文件的内容发生了任何形式的改变(包括人为修改或者下载过程中线路不稳定引起的传输错误等),只要你对这个文件重新计算md5时就会发现信息摘要不相同,由此可以确定你得到的只是一个不正确的文件。如果再有一个第三方的认证机构,用md5还可以防止文件作者的"抵赖",这就是所谓的数字签名应用。

2md5还广泛用于加密和解密技术上。比如在unix系统中用户的密码就是以md5(或其它类似的算法)经加密后存储在文件系统中。当用户登录的时候,系统把用户输入的密码计算成md5值,然后再去和保存在文件系统中的md5值进行比较,进而确定输入的密码是否正确。通过这样的步骤,系统在并不知道用户密码的明码的情况下就可以确定用户登录系统的合法性。这不但可以避免用户的密码被具有系统管理员权限的用户知道,而且还在一定程度上增加了密码被破解的难度。

(六)Php中自带的加密函数的比较:

1,不可逆的加密函数为:md5()crypt()

md5() 用来计算 MD5 哈稀。语法为:string md5(string str);

crypt() 将字符串用 UNIX 的标准加密 DES 模块加密。这是单向的加密函数,无法解密。欲比对字符串,将已加密的字符串的头二个字符放在 salt 的参数中,再比对加密后的字符串。

语法为:string crypt(string str, string [salt]);

2,可逆转的加密为:base64_encode()urlencode() 

相对应的解密函数:base64_decode() urldecode()

base64_encode() 将字符串以 MIME BASE64 编码。此编码方式可以让中文字或者图片也能在网络上顺利传输。语法为:string base64_encode(string data); 解密函数为:string base64_decode(string encoded_data); 将复回原样

urlencode() 将字符串以 URL 编码。例如空格就会变成加号。语法为:string urlencode(string str);

它的解密函数为:string urldecode(string str); 将复回原样

 


0 0