Javascript PHP 中 json_encode() 和 setcookie() 的等效数组
Javascript array equivalent of json_encode() and setcookie() in PHP
在 PHP 中,我有一个数组,我用 JSON 对其进行了编码,然后我将其变成了一个 cookie。
<?php
$array = array("name" => "bob", "age" => "20");
$arrayJSON = json_encode($array);
setcookie("name", $arrayJSON, time() + (86400 * 33), "/");
?>
我现在正尝试对 Javascript 做同样的事情。 Javascript 相当于 json_encoding 一个 Javascript 数组,然后将其设置为 cookie?这是我目前所拥有的:
<script>
var array = new Array();
array["name"] = "bob";
array["age"] = "20";
// Need help here
array = *javascript_json_encode*(array); // Do the Javascript equivalent of PHP's json_encode();
document.cookie = "name="+array;
</script>
我试图这样做,以便 Javascript cookie 的格式与 PHP cookie 的格式相同。当你在浏览器控制台输入“document.cookie”时,我需要Javascript cookie格式如下
我需要将 "name: bob"
和 "age: 20"
变成 %7B%22name%22%3A%22bob%22%2C%22age%22%3A%2220%22%7D"
。别管我怎么做。
正在将我的评论转化为答案。 PHP 对待数组的方式与 JS 不同——它对顺序递增的整数结构和键值对 dictionary/hashmap-like 结构使用一种结构。
JS 数组只接受连续的整数,所以 const a = new Array(); a["foo"] = "bar"
从根本上来说是错误的——几乎没有任何用例可以在数组对象上设置这些属性,即使它看起来可行。
如果您想要键值对结构,请使用 object or a Map
. If you want to stringify it to JSON, use JSON.stringify
. If you want to encode that as a URI component, use encodeURIComponent
。
综合起来:
const obj = {name: "bob", age: 20};
const json = JSON.stringify(obj);
const encoded = encodeURIComponent(json);
console.log(obj);
console.log(json);
console.log(encoded);
在 PHP 中,我有一个数组,我用 JSON 对其进行了编码,然后我将其变成了一个 cookie。
<?php
$array = array("name" => "bob", "age" => "20");
$arrayJSON = json_encode($array);
setcookie("name", $arrayJSON, time() + (86400 * 33), "/");
?>
我现在正尝试对 Javascript 做同样的事情。 Javascript 相当于 json_encoding 一个 Javascript 数组,然后将其设置为 cookie?这是我目前所拥有的:
<script>
var array = new Array();
array["name"] = "bob";
array["age"] = "20";
// Need help here
array = *javascript_json_encode*(array); // Do the Javascript equivalent of PHP's json_encode();
document.cookie = "name="+array;
</script>
我试图这样做,以便 Javascript cookie 的格式与 PHP cookie 的格式相同。当你在浏览器控制台输入“document.cookie”时,我需要Javascript cookie格式如下
我需要将 "name: bob"
和 "age: 20"
变成 %7B%22name%22%3A%22bob%22%2C%22age%22%3A%2220%22%7D"
。别管我怎么做。
正在将我的评论转化为答案。 PHP 对待数组的方式与 JS 不同——它对顺序递增的整数结构和键值对 dictionary/hashmap-like 结构使用一种结构。
JS 数组只接受连续的整数,所以 const a = new Array(); a["foo"] = "bar"
从根本上来说是错误的——几乎没有任何用例可以在数组对象上设置这些属性,即使它看起来可行。
如果您想要键值对结构,请使用 object or a Map
. If you want to stringify it to JSON, use JSON.stringify
. If you want to encode that as a URI component, use encodeURIComponent
。
综合起来:
const obj = {name: "bob", age: 20};
const json = JSON.stringify(obj);
const encoded = encodeURIComponent(json);
console.log(obj);
console.log(json);
console.log(encoded);