$ser = 'a:2:{i:0;s:5:"héllö";i:1;s:5:"wörld";}'; // fails
$ser2 = 'a:2:{i:0;s:5:"hello";i:1;s:5:"world";}'; // works
$out = unserialize($ser);
$out2 = unserialize($ser2);
print_r($out);
print_r($out2);
echo "<hr>";
但为什么?
我应该在序列化之前编码吗?怎么样?
我使用Javascript将序列化的字符串写入隐藏字段,而不是PHP的$ _POST
在JS中我有类似的东西:
function writeImgData() {
var caption_arr = new Array();
$('.album img').each(function(index) {
caption_arr.push($(this).attr('alt'));
});
$("#hidden-field").attr("value", serializeArray(caption_arr));
};
unserialize()
失败的原因:
$ser = 'a:2:{i:0;s:5:"héllö";i:1;s:5:"wörld";}';
是因为for的长度héllö
和wörld
是错误的,因为PHP本身无法正确处理多字节字符串:
echo strlen('héllö'); // 7
echo strlen('wörld'); // 6
但是,如果您尝试unserialize()
使用以下正确的字符串:
$ser = 'a:2:{i:0;s:7:"héllö";i:1;s:6:"wörld";}';
echo '<pre>';
print_r(unserialize($ser));
echo '</pre>';
有用:
Array
(
[0] => héllö
[1] => wörld
)
如果使用PHP,serialize()
它应该正确计算多字节字符串索引的长度。
另一方面,如果要使用多种(编程)语言处理序列化数据,则应将其忘记,而转而使用JSON(JSON)之类的方法,该方法更加标准化。
有没有一种方法可以正确地反序列化以双引号开头和结尾的JSON字符串? 数据以流的形式输入(来自AWS S3对象)。这是流的内容(注意开头和结尾的双引号字符): JsonSerializer似乎没有正确地反序列化它。但是,对于以下内容,其工作原理与预期一致: 以下是片段:
我正在尝试使用apache camel jackson xml对xml进行反序列化,然后发生了一些奇怪的事情,我无法解释。这是我正在尝试反序列化的xml(它是简单的xmltd v xml文件): 这是我的POJO: 电视。Java语言 程序Java语言 Credits.java 其他POJO并不重要。下面是路由配置: 使用此设置和我在开始时提供的xml,会发生以下异常: 通用域名格式。faster
问题内容: 我正在使用Newtonsoft.Json将Web服务的输出反序列化到对象。在我向我的课程(名为)添加一个属性以保存化身之前,它一直运行良好。 Web服务正按预期返回该属性作为Base64字符串。问题是当我尝试将JSON从WS转换回a时,在此代码块中引发了a : 异常的输出是: 并查看内部异常: 显然,它无法解析Base64字符串,但不清楚原因。 有任何想法/解决方法吗? 编辑 我知道我
我有以下JSON: 这基本上是一个包含项集合的对象。 所以我做了一个类来反序列化: 我尝试添加,但没有成功。 怎么走?
我正在尝试让Tomcat在关机时坚持我的会话。我已经解决了这样一个要求,即我在会话中存储的所有内容都是可序列化的,当我在Eclipse下运行Tomcat时,这很好:当代码更改迫使Eclipse重新加载webapp时,会话现在仍然存在。 然而,当我试图在一个独立的Tomcat中做同样的事情时,我遇到了一个问题。 我取消了${catalina.base}/conf/context.xml中的Manag
将有更多的类(不同的产品)扩展。 当我使用序列化它时, 这是输出: 将引发此异常: java.lang.IllegalArgumentException:意外的标记(VALUE_STRING),应为field_name:缺少包含类型id(类com.shubham.model.product的)的属性“type”,位于[源:n/a;行:-1,列:-1] 我在这里做错了什么?我观察了一下,发现了一个问