PHP:序列化和反序列化包含转义字符的字符串

标签 php serialization escaping

如何正确序列化和反序列化包含转义字符的字符串?

给定:

$data = "\'test\'";
$out= serialize($data);
print_r($out); // ->  s:8:"\'test\'";

这里的问题是,反序列化不接受字符串长度:

$out = 's:8:"\'test\'"';
var_dump(unserialize($out)); // -> bool(false)

但是如果我将字符串长度更改为 6(忽略转义字符):

$out = 's:6:"\'test\'"';
var_dump(unserialize($out)); // -> string(6) "'test'"

它反序列化正确。

处理这个问题的好方法是什么?

最佳答案

我会尝试在序列化数据之前调用 base64_encode(),然后在反序列化数据之后调用 base64_decode()

$data = "\'test\'";
$out= serialize(base64_encode($data));
var_dump(base64_decode(unserialize($out))); // -> bool(false)

关于PHP:序列化和反序列化包含转义字符的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7146570/

相关文章:

php - HTML5 PHP 表单问题

symfony - 自定义规范器未通过名称转换器服务

c# - 有条件地序列化/反序列化属性

java - 使用 Object 字段序列化类的方法?

javascript - 是否可以将 "\t"分隔为 char '\' + 't'

php - PHP 中的 SQL 注入(inject),如何将非转义引号发送到服务器?

php - 计算数组中相等的相邻值

php - 使用 sprintf() 和格式符号进行查询的问题

simplexml - PHP - SimpleXML 不返回对象

php - 如何在 PHP 中替换/转义 U+2028 或 U+2029 字符以阻止我的 JSONP API 中断