php几种编码与序列化(rawurlencode, igbinary,json_encode)的区别

芮宇航
2023-12-01

最近,在公司负责第三方短信运营商对接开发时,遇到了转码和序列化的问题,再请教了大神之后才终于解决了,下边重点回顾下PHP中的各种序列化和编码的功能和应用场景。

一、urlencode与urldecode

功能:便于将字符串编码并将其用于 URL 的请求部分,同时它还便于将变量传递给下一页。

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

编码原理:将需要转码的字符转为16进制,然后从右到左,取4位(不足4位直接处理),每2位做一位,前面加上%,编码成%XY格式。

注1:这个不仅仅用于页面传递url参数部分,在交换数据时也可以采用此种编码,只要双方协商好就行了。

注2:此编码在将空格编码为加号(+)。

注3:超全局变量 $_GET$_REQUEST 已经被解码了。对 $_GET$_REQUEST 里的元素使用 urldecode() 将会导致不可预计和危险的结果。

二、rawurldecode与rawurlencode

功能和场景和urlencode和urldecode类似,区别在于处理+的问题上。

rawurlencode将空格编码为%20;

rawurldecode() 不会把加号('+')解码为空格。

注:支持直接中文操作。

三、igbinary_serialize与igbinary_unserialize

功能:序列化与反序列化,igbinary 來解決這個問題,而且速度比 serailizer 和 json 快很多。

场景:对象序列化,支持中文直接操作。

注:使用此函数必须安装igbinary扩展,速度方面igbinary > json >serailizer。

四、http_build_query与parse_url

功能:生成 URL-encode 之后的请求字符串;生成url的组成部分。

主:支持直接中文操作,会自动进行url-encode。

<?php
$data = array('foo'=>'bar',
              'baz'=>'boom',
              'cow'=>'milk',
              'php'=>'hypertext processor');

echo http_build_query($data) . "\n";
echo http_build_query($data, '', '&amp;');
/*结果
foo=bar&baz=boom&cow=milk&php=hypertext+processor
foo=bar&amp;baz=boom&amp;cow=milk&amp;php=hypertext+processor
*/

$url = 'http://username:password@hostname:9090/path?arg=value#anchor';
var_dump(parse_url($url));
//结果
array(8) {
  ["scheme"]=>
  string(4) "http"
  ["host"]=>
  string(8) "hostname"
  ["port"]=>
  int(9090)
  ["user"]=>
  string(8) "username"
  ["pass"]=>
  string(8) "password"
  ["path"]=>
  string(5) "/path"
  ["query"]=>
  string(9) "arg=value"
  ["fragment"]=>
  string(6) "anchor"
}

?>

五、base64_decode与base64_encode

功能:采用MIME base64对data进行编码和解码。

场景:对订单号进行加密,因为是可逆的。

六、serialize与unserialize

功能:产生一个可存储的值的表示,支持直接中文操作。

场景:对象的传输必须系列化二进制才行,必须用到此函数。

注1:unserialize若被解序列化的变量是一个对象,在成功地重新构造对象之后,PHP 会自动地试图去调用 __wakeup() 成员函数(如果存在的话)。

注2:当序列化对象时,PHP 将试图在序列动作之前调用该对象的成员函数 __sleep()

七、json_encode与json_decode

功能:对变量进行 JSON 编码(所有字符串数据的编码必须是 UTF-8);

对 JSON 格式的字符串进行解码(这个函数仅能处理 UTF-8 编码的数据);

场景:数据传输时需要序列化和反序列化,尤其是在跨语言操作时,json是一种标准。

 类似资料: