cookie php 在 js 中

Cookie php in js

如果通过 php 创建 cookie,则无法在 js 中使用它们。 创建 cookie:

function opo_setcookie( $name, $value, $expire = 0, $secure = false ) {
        if ( ! headers_sent() ) {
            setcookie( $name, $value, $expire, COOKIEPATH ? COOKIEPATH : '/', COOKIE_DOMAIN, $secure );
        } elseif ( defined( 'WP_DEBUG' ) && WP_DEBUG ) {
            headers_sent( $file, $line );
            trigger_error( "{$name} cookie cannot be set - headers already sent by {$file} on line {$line}", E_USER_NOTICE );
        }
    }
...
$cart = array("key"=>$key, "user"=> $user, "products"=> array(), "total"=> 0, "price"=>0, "lang"=>ICL_LANGUAGE_CODE);
opo_setcookie('opo_cart', addslashes( json_encode($cart) ), time()+2592000);

尝试获取 cookie:

function getCookie(name) {
            var nameEQ = name + "=";
            var ca = document.cookie.split(';');
            for(var i=0;i < ca.length;i++) {
                var c = ca[i];
                while (c.charAt(0)==' ') c = c.substring(1,c.length);
                if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length);
            }
            return null;
    }
var json_str = getCookie('opo_cart');

但出现错误:未捕获语法错误:JSON 中位置 0 的意外标记 %。 因为 cookie 的内容是“%7B%5C%22lang%5C%22%3A%5C%22en%5C%22%7D...” 我该如何解决这个问题?

您需要使用 decodeURI 函数:

var json_str = decodeURI(getCookie('opo_cart'));

看这里:https://www.w3schools.com/jsref/jsref_decodeuri.asp