function serializedata($typ, $val)
{
$rs = "";
global $xmlrpcTypes, $xmlrpcBase64, $xmlrpcString, $xmlrpcBoolean;
switch ($xmlrpcTypes[$typ]) {
case 3:
// struct
$rs .= "<struct>\n";
reset($val);
while (list($key2, $val2) = each($val)) {
$rs .= "<member><name>{$key2}</name>\n";
$rs .= $this->serializeval($val2);
$rs .= "</member>\n";
}
$rs .= "</struct>";
break;
case 2:
// array
$rs .= "<array>\n<data>\n";
for ($i = 0; $i < sizeof($val); $i++) {
$rs .= $this->serializeval($val[$i]);
}
$rs .= "</data>\n</array>";
break;
case 1:
switch ($typ) {
case $xmlrpcBase64:
$rs .= "<{$typ}>" . base64_encode($val) . "</{$typ}>";
break;
case $xmlrpcBoolean:
$rs .= "<{$typ}>" . ($val ? "1" : "0") . "</{$typ}>";
break;
case $xmlrpcString:
$rs .= "<{$typ}>" . htmlspecialchars($val) . "</{$typ}>";
break;
default:
$rs .= "<{$typ}>{$val}</{$typ}>";
}
break;
default:
break;
}
return $rs;
}