模仿1024tools.com/unserialize写的反序列化小工具
用了两个文件完成的
话不多说,上源码
1.serialize.php
<?php
/**
* 序列化 反序列化处理
*/
header('content-type:text/html;charset=utf8 ');
require_once 'function.php';
$result = array();
$str = '';
//验证post提交
if(getIsPostRequest()){
$data = Input('data');
$data1 = Input('data1');
if(!empty($data)) {
if(!is_serialized($data)) {
echo "解析失败";die;
}
$result = unserialize($data);
print_r($result);die;
}
if(!empty($data1)) {
$str = serialize($data1);
print_r($str);die;
}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
<script src="./js/jquery-3.2.1.js"></script>
<link rel="stylesheet" href="./ext/bootstrap/css/bootstrap.css" />
<title>序列化处理</title>
<style>
#div1{float:left;width:800px;height:500px;margin-left:20px;}
#div2{float:left;width:800px;height:500px;margin-left: 30px;}
.text1{color:#fff;background:#000;border-style:none;width:800px;height:500px;resize:none;}
.text2{color:#fff;background:#000;border-style:none;width:800px;height:500px;resize:none;}
p{font-size: 18px;}
h3{margin-left:20px;}
.btn{margin-top:10px;}
</style>
</head>
<body>
<h3>php在线反序列化工具 unserialize serialize</h3>
<div id="div1">
<p>输入需要反序列化的字符串:<a href="javascript:;" id="li">样例</a></p>
<textarea class="text1" id="text1"></textarea>
<input type="button" class="btn btn-info" id="fan" value="反序列化"/>
<input type="button" class="btn btn-warning" id="del" value="清空"/>
</div>
<div id="div2">
<p>输出结果:</p>
<textarea class="text2" id="text2"></textarea>
<input type="button" class="btn btn-info" id="xu" value="序列化"/>
<input type="button" class="btn btn-success" onClick="copy()" value="复制结果"/>
</div>
<script>
//序列化例子
$("#li").click(function(){
var content = 'a:2:{s:5:"title";s:9:"serialize";s:7:"content";s:7:"manager";}';
$(".text1").val(content);
});
//反序列化操作
$("#fan").click(function() {
var url = 'serialize.php';
var data = $(".text1").val();
if(data.length == 0) {
alert('输入为空');
return false;
}
$.post(url,{data:data}, function(flag){
$(".text2").val(flag);
});
});
//序列化操作
$("#xu").click(function() {
var url = 'serialize.php';
var data = $(".text2").val();
if(data.length == 0) {
alert('输入为空');
return false;
}
$.post(url,{data1:data}, function(flag){
$(".text1").val(flag);
});
});
//清空操作
$("#del").click(function() {
$(".text1").val('');
$(".text2").val('');
});
//复制结果
function copy() {
var Url2 = document.getElementById("text2");
Url2.select(); // 选择对象
document.execCommand("Copy"); // 执行浏览器复制命令
alert("已复制好,可贴粘。");
}
</script>
</body>
</html>
2.function.php
<?php
/**
* 公共方法
*/
/**
* 验证post请求或get请求
* @since 2017/09/26
*/
function getIsPostRequest()
{
return isset($_SERVER['REQUEST_METHOD']) && !strcasecmp($_SERVER['REQUEST_METHOD'],'POST');
}
/**
* 获取POST/GET传递的数据
* @param name 字段
* @param default 默认结果
*/
function Input($name,$default='') {
$value1 = isset($_POST[$name]) ? $_POST[$name] : '';
$value2 = isset($_GET[$name]) ? $_GET[$name]: $default;
$value = $value1?$value1:$value2;
return $value;
}
/**
* 判断字符串是否属于字符串序列化
* @param $data
* @return bool
*/
function is_serialized($data)
{
$data = trim($data);
if ('N;' == $data)
return true;
if (!preg_match('/^([adObis]):/', $data, $badions))
return false;
switch ($badions[1]) {
case 'a' :
case 'O' :
case 's' :
if (preg_match("/^{$badions[1]}:[0-9]+:.*[;}]\$/s", $data))
return true;
break;
case 'b' :
case 'i' :
case 'd' :
if (preg_match("/^{$badions[1]}:[0-9.E-]+;\$/", $data))
return true;
break;
}
return false;
}
感悟:有好多东西做之前以为很简单,做起来也不一定十拿九稳,还是有一些自己不会的,做技术的手不能懒。
借用一首诗吧,身是菩提树,心如明镜台,时时勤拂拭,勿使惹尘埃。