serialize unserialize transparent entre php et js :) [regexp] - HTML/CSS - Programmation
Marsh Posté le 10-10-2003 à 15:23:50
k666 a écrit : j'aimerais appliquer une regexp pour désérialiser le tout simplememnt; |
Pourquoi donc ? En js2, uneval() se charge de faire ce que tu veux. Le but est donc de filer la chaîne de sortie à eval() pour qu'il ressorte un objet.
Pour coder uneval(), tu boucles sur tes propriétés (for ... in), tu créés une chaîne qui représente un objet littéral (comme tu as mis), et hop !
eg
var str = '';
function uneval(obj)
{
str += '{';
for (i in obj)
{
if (typeof(obj[i]) == 'number' || typeof(obj[i]) == 'string')
str += i + ':' + obj[i];
else
str += i + uneval(obj[i]);
}
str += '}';
}
(non testé)
Marsh Posté le 10-10-2003 à 15:25:37
youdontcare a écrit : (non testé) |
Effectivement, j'ai même oublié les virgules
pour ton zob, ça donnerait :
{
macle : "va\"leur",
monchiffre : 21,
monfloat : 5.5
}
Marsh Posté le 10-10-2003 à 17:09:22
merci bieng youdontcare je vais me pencher sur ta méthode pour essayer de m'en tenir parfaitement à la syntaxe de php !
en effet on veut faire le plus transparent possible pour travailler serverside ou clientside et c pour ca qu'on fait des trucs tordus comme ca ... mais vu que php est plus lourd a modifier on prefere que JS s'adapte a lui que l'inverse !
merci pour ton codax je l'intègrerai et pondrai la version finale:jap:
Marsh Posté le 10-10-2003 à 12:10:58
hello
je cherche a faire une fonction qui fasse de la serialisation d'objets à la php en js, et qui puisse aussi les désérialiser...
il faut que la syntaxe d'objet sérialisé soit identique...
les objets que je sérialiserai ne sont que des tableaux à clé basiques, du style:
tab["zob"] = "pouet"
ou tab[2] = 10;
ou tab["miam"] = 12.30;
par exemple avec ce code:
<?
$zob["macle"] = "va\"leur";
$zob["monchiffre"] = 21;
$zob["monfloat"] = 5.5;
echo serialize($zob);
?>
j'obtiens ça:
a:3:{s:5:"macle";s:7:"va"leur";s:10:"monchiffre";i:21;s:8:"monfloat";d:5.5;}
j'aimerais appliquer une regexp pour désérialiser le tout simplememnt;
si vous avez une idée ou un ptit coup de main ?