1 - serialize e unserialize
As tradicionais funções nativas do PHP.
$a = array('a' => 'Amora' ,'b' => 'banana' , 'c' => 'Coco');
//serialize do array
//a:3:{s:1:"a";s:5:"Amora";s:1:"b";s:6:"banana";s:1:"c";s:7:"Coco";}
Quando o array contêm caracteres como a aspa ("), o apóstrofe (') ou dois pontos (:), podem existir problemas ao passar pelo unserialized se estes dados tiverem sidos salvos em um banco de dados. A maneira mais simples de resolver este problema é usando base64_encode e base64_decode.
//serialize - $s será salvo em algum banco de dados
$s = base64_encode(serialize($a));
//unserialize - $txt veio de algum banco de dados
Infelizmente base64 irá aumentar o tamanho da string, se isto for um problema para o seu sistema gzcompress resolverá a questão:
//função para realizar o serialize, $dados deve conter a string a passar pelo tratamento
function my_serialize($dados) {
return base64_encode(gzcompress(serialize($dados)));
//função para realizar o unserialize, $dados deve conter a string a passar pelo tratamento reverso
function my_unserialize($dados) {
return unserialize(gzuncompress(base64_decode($dados)));
2 - json_encode e json_decode
JSON é um formato alternativo que trás vantagens em relação ao serialize/unserialize, por exemplo:
- json_encode + json_decode é muito mais rápido que serialize + unserialize;
- json trás uma string legível;
- json tem um tamanho menor que o resultado do serializado;
- json é aberto e portável. Outras linguagens poderão usar a mesma string se necessário.
//{"a":"Amora","b":"banana","c":"Coco"}
Como pode ser visto no exemplo a saída do json_encode é claramente menor em relação ao primeiro exemplo mostrado neste artigo.
3 - var_export e eval
O PHP tem uma função chamada var_export, basicamente ela exporta uma variável usando a sintaxe do PHP, o que permite que com uso do eval a string se torne uma variável com o valor original.
//strin de saída >> array ( 'a' => 'Amora', 'b' => 'banana', 'c' => 'Coco', )
4 - wddx_serialize_value e wddx_deserialize
Aqui a ideia é basicamente a mesma do mostrado no caso do JSON, só que usando a saída será um XML.
//bananaCoco
//Array ( [a] => Amora [b] => banana [c] => Coco )
Vale ressaltar que o comportamento caso você use as técnicas com objetos terão efeitos diferentes, por exemplo json_encode simplesmente falhará, neste caso você deverá verificar isto no momento da implementação, mas tirando esses detalhes, também é possível adaptar para esta outra realidade.