Frage

Gibt es eine Möglichkeit, dass ich eine decodeValue() Funktion in PHP, genießen könnte? Ich bin diese encodedValue Werte in eine PHP-Datei veröffentlichen, und ich muss mit ihnen in PHP als Array arbeiten.

Wie kann ich mit einem PHP-Array oder etwas aus dem codierten Zustand in Ext enden? Oder gibt es eine andere Art und Weise, dass ich die codierten Werte arbeiten zu können, sie leicht in PHP lesen? Hier ist der Funktionscode:

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;
        }
    }

Danke.

War es hilfreich?

Lösung

Unten ist mein Hafen zu PHP. Früher habe ich die Klasse Datetime anstelle von Datum, da es in der Nähe PHP gleichwertig ist, aber man könnte auch verwenden strftime () einen Unix-Zeitstempel zu bekommen, oder was auch immer Methode, die Sie bevorzugen. Auch für Typ ‚o‘ ich ein Array anstatt ein Objekt, verkeilt durch die Objektparameternamen.

Hier ist der Code:

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;
    }
}

Andere Tipps

einen Fehler im Code behoben. Jetzt zweite Ebene / dritte Ebene Array sollte korrekt funktionieren.

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;
    }
}
$all.array_push(decodeValue($values[$i]));

ersetzt werden müssen mit

$all[] = decodeValue($values[$i]);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top