maven 引用的包
<!--反序列化 php--> <dependency> <groupId>org.sction</groupId> <artifactId>phprpc</artifactId> <version>3.0.2</version> </dependency主要的操作方法:
public static Map<String, Object> getUnserializeMap(String content) throws Exception { Map<String, Object> list = new HashMap<String, Object>(); PHPSerializer p = new PHPSerializer(); if (StringUtils.isEmpty(content)) return list; AssocArray array = (AssocArray) p.unserialize(content.getBytes()); for (int i = 0; i < array.size(); i++) { Map<String, Object> t = (Map) Cast.cast(array.get(i), Map.class); list.putAll(t); } return list; } /** * 对java 对象序列化 * @param obj * @return */ public static String PHPSerialize(Object obj) { try { PHPSerializer p = new PHPSerializer(); byte[] b = p.serialize(obj); return new String(b); } catch (Exception e) { log.error("==php序列化失败==", e); } return ""; }上示例:
public static void main(String[] args) throws Exception { List<Map<String, Integer>> list = new ArrayList<Map<String,Integer>>(); Map<String, Integer> map = new HashMap<String, Integer>(); map.put("test1", 1); list.add(map); map = new HashMap<String, Integer>(); map.put("test2", 2000); list.add(map); System.out.println(PHPSerialize(list)); List<Map<String, String>> list1 = new ArrayList<Map<String,String>>(); Map<String, String> map2 = new HashMap<String, String>(); map2.put("test1", "1"); list1.add(map2); map2 = new HashMap<String, String>(); map2.put("test2", "2000"); list1.add(map2); System.out.println(PHPSerialize(list1)); }由两个 List<Map> 的对象数据 但是map的类型不同输出的结果有差别
输出如下:
a:2:{i:0;a:1:{s:5:"test1";i:1;}i:1;a:1:{s:5:"test2";i:2000;}} a:2:{i:0;a:1:{s:5:"test1";s:1:"1";}i:1;a:1:{s:5:"test2";s:4:"2000";}}
这里我们可以得出结论 随着map的类型的变化 i:2000; 和 s:4:"2000"; 这个的结构也会变 那么i其实对应的是php里的整型而s 代表的是字符型 s后面的值是字符的长度
示例二:
public static void main(String[] args) throws Exception { String content = "a:1:{i:0;a:1:{s:33:\"3839914ceb851278cb14a5ab7364e9ec0\";i:1;}}"; System.out.println(getUnserializeMap(content)); }这里可以将 String content = "a:1:{i:0;a:1:{s:33:\"3839914ceb851278cb14a5ab7364e9ec0\";i:1;}}" 字符转成map结构
输出: {3839914ceb851278cb14a5ab7364e9ec0=1}