1

有什么方法可以让我也享受decodeValue()PHP 中的功能吗?我将这些编码值值发布到 PHP 文件中,我需要在 PHP 中将它们作为数组使用。

我怎样才能得到一个 PHP 数组或 Ext 中编码状态的东西?或者,有没有其他方法可以让我处理编码值以便能够在 PHP 中轻松读取它们?这是功能代码:

decodeValue : function(cookie){
        var re = /^(a|n|d|b|s|o)\:(.*)$/;
        var matches = re.exec(unescape(cookie));
        if(!matches || !matches[1]) return; // non state cookie
        var type = matches[1];
        var v = matches[2];
        switch(type){
            case "n":
                return parseFloat(v);
            case "d":
                return new Date(Date.parse(v));
            case "b":
                return (v == "1");
            case "a":
                var all = [];
                var values = v.split("^");
                for(var i = 0, len = values.length; i < len; i++){
                    all.push(this.decodeValue(values[i]));
                }
                return all;
           case "o":
                var all = {};
                var values = v.split("^");
                for(var i = 0, len = values.length; i < len; i++){
                    var kv = values[i].split("=");
                    all[kv[0]] = this.decodeValue(kv[1]);
                }
                return all;
           default:
                return v;
        }
    }

谢谢你。

4

3 回答 3

1

下面是我对 PHP 的移植。我使用 DateTime 类代替 Date 因为它是最接近的 PHP 等价物,但您也可以使用 strftime() 来获取 Unix 时间戳,或任何您喜欢的方法。此外,对于 'o' 类型,我返回一个数组而不是一个对象,由对象的参数名称键入。

这是代码:

function decodeValue($cookie) {
    $cookie = urldecode($cookie);
    $re = '/^(a|n|d|b|s|o)\:(.*)$/';
    $matches = array();
    preg_match($re, $cookie, $matches);
    if(!$matches || !$matches[1]) return; // non state cookie
    $type = $matches[1];
    $v = $matches[2];
    switch ($type){
        case "n":
            return floatval($v);
        case "d":
            return new DateTime($v);
        case "b":
            return ($v == "1" ? true : false);
        case "a":
            $all = array();
            $values = explode('^', $v);
            $len = count($values);
            for ($i = 0; $i < $len; $i++) {
                $all.push(decodeValue($values[$i]));
            }
            return $all;
       case "o":
            $all = array();
            $values = explode('^', $v);
            $len = count($values);
            for($i = 0; $i < $len; $i++){
                $kv = explode('=', $values[$i]);
                $all[$kv[0]] = decodeValue($kv[1]);
            }
            return $all;
       default:
            return $v;
    }
}
于 2009-06-21T13:58:08.283 回答
1

修复了代码中的一个错误。现在二级/三级数组应该可以正常工作。

function decodeValue($cookie) {
    $cookie = urldecode($cookie);
    $re = '/^(a|n|d|b|s|o)\:(.*)$/';
    $matches = array();
    preg_match($re, $cookie, $matches);
    if(!$matches || !$matches[1]) return $cookie; // non state cookie
    $type = $matches[1];
    $v = $matches[2];

    switch ($type){
        case "n":
            return floatval($v);
        case "d":
            return new DateTime($v);
        case "b":
            return ($v == "1" ? true : false);
        case "a":
            $all = array();
            $values = explode('^', $v);
            $len = count($values);
            for ($i = 0; $i < $len; $i++) {
                $all.array_push(decodeValue($values[$i]));
            }
            return $all;
       case "o":
            $all = array();
            $values = explode('^', $v);
            $len = count($values);
            for($i = 0; $i < $len; $i++){
                $kv = explode('=', $values[$i],2);
                if(count($kv)==1){
                    $all[] = decodeValue($kv[0]);
                }else{
                    $all[$kv[0]] = decodeValue($kv[1]);
                }
            }
            return $all;
       default:
            return $v;
    }
}
于 2011-11-16T20:19:18.510 回答
1
$all.array_push(decodeValue($values[$i]));

需要替换为

$all[] = decodeValue($values[$i]);
于 2012-01-23T02:06:11.147 回答