Arrays in JavaScript cannot be directly saved as cookies (PHP can). Therefore, you need to convert the arrays into strings and store them in cookies. For a simple one-dimensional array, we use toString () or join:
In JavaScript, The toString function is a string representation of the returned object.
Usage: objectname. toString ([radix])
Objectname is required. The object to be represented by a string.
Radix is optional. Specifies the hexadecimal format when the numeric value is converted to a string.
Join is one of the methods.
Format: objArray. join (seperator)
Purpose: Use the character specified by seperator as the separator to convert the array into a string. When seperator is a comma, it serves the same purpose as toString.
If the multi-dimensional array is used, we need to use JSON.
JSON (JavaScript Object Notation) is a lightweight data exchange format. Easy to read and write. It is also easy to parse and generate machines. It is based on a subset of JavaScript Programming Language, Standard ECMA-262 3rd Edition-December 1999. JSON uses a completely language-independent text format, but it also uses a habit similar to the C language family (including C, C ++, C #, Java, JavaScript, Perl, Python, and so on ). These features make JSON an ideal data exchange language.
Here we use the PHP2JS function library for implementation. We need json_decode and json_encode functions. PHP users can understand the meaning of these two functions. Json_decode is from JSON to array, and json_encode is from array to JSON.
It should be noted that some characters are filtered by saving the Cookie in JavaScript, for example, "{" is filtered. Therefore, these characters must be filtered when the Cookie is obtained. Otherwise, an error occurs in json_decode.
The following is a simple example:
Copy codeThe Code is as follows:
<Script type = "text/javascript">
Function setCookie (name, value ){
Document. cookie = name + "=" + value;
}
Function getCookie (name ){
Var arr = document. cookie. match (new RegExp ("(^ |)" + name + "= ([^;] *) (; | $ )"));
If (arr! = Null) return unescape (arr [2]); return '';
}
Function savecookie (){
Var dc = {};
Dc ['a'] = {};
Dc ['a'] ['X'] = 'ax ';
Dc ['a'] ['y'] = 'ay ';
Dc ['a'] ['Z'] = 'az ';
Dc ['B'] = {};
Dc ['B'] ['X'] = 'bx ';
Dc ['B'] ['y'] = 'by ';
Dc ['B'] ['Z'] = 'bz ';
Var cdc = json_encode (dc );
SetCookie ('testcookie ', cdc );
}
Function clearcookie (){
SetCookie ('testcookie ','');
}
Function readcookie (){
Var cdc = getCookie ('testcookie ');
Cdc = cdc. replace (/, _/g ,',');
Cdc = cdc. replace (/{_/g ,'{');
Cdc = cdc. replace (/_}/g ,'}');
Var dc = json_decode (cdc );
For (I in dc ){
For (j in dc [I]) {
Document. write (I + ':' + j + ':' + dc [I] [j] + '<br> ');
}
}
}
Function json_decode (str_json ){
// Decodes the JSON representation into a PHP value
//
// Version 906.1806
// Discuss at: http://phpjs.org/functions/json_decode
// + Original by: Public Domain (http://www.json.org/json2.js)
// + Reimplemented by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Improved by: T. J. Leahy
// * Example 1: json_decode ('[\ n "e", \ n {\ n "pluribus": "unum" \ n} \ n]');
// * Returns 1: ['E', {pluribus: 'unum'}]
/*
Http://www.JSON.org/json2.js
2008-11-19
Public Domain.
No warranty expressed or implied. use at your own risk.
See http://www.JSON.org/js.html
*/
Var json = this. window. JSON;
If (typeof json = 'object' & typeof json. parse = 'function '){
Return json. parse (str_json );
}
Var cx =/[\ u0000 \ u00ad \ u0600-\ u0604 \ u070f \ u17b4 \ u17b5 \ u200c-\ u200f \ u2028-\ u202f \ u2060-\ signature \ ufeff \ ufff0- \ uffff]/g;
Var j;
Var text = str_json;
// Parsing happens in four stages. In the first stage, we replace certain
// Unicode characters with escape sequences. JavaScript handles character characters
// Incorrectly, either silently deleting them, or treating them as line endings.
Cx. lastIndex = 0;
If (cx. test (text )){
Text = text. replace (cx, function (){
Return '\ U' +
('100' + a. charCodeAt (0). toString (16). slice (-4 );
});
}
// In the second stage, we run the text against regular expressions that look
// For non-JSON patterns. We are especially concerned with '()' and 'new'
// Because they can cause invocation, and '= 'because it can cause mutation.
// But just to be safe, we want to reject all unexpected forms.
// We split the second stage into 4 regexp operations in order to work around
// Crippling inefficiencies in IE's and Safari's regexp engines. First we
// Replace the JSON backslash pairs with '@' (a non-JSON character). Second, we
// Replace all simple value tokens with '] 'characters. Third, we delete all
// Open brackets that follow a colon or comma or that begin the text. Finally,
// We look to see that the remaining characters are only whitespace or ']' or
// ',' Or ':' or '{' or '}'. If that is so, then the text is safe for eval.
If (/^ [\], :{}\ s] * $ /.
Test (text. replace (/\\(? : ["\\\/Bfnrt] | u [0-9a-fA-F] {4})/g ,'@').
Replace (/"[^" \ n \ r] * "| true | false | null | -? \ D + (? : \. \ D *)? (? : [EE] [+ \-]? \ D + )? /G, ']').
Replace (/(? : ^ |: | ,)(? : \ S * \ [) +/g ,''))){
// In the third stage we use the eval function to compile the text into
// JavaScript structure. The '{' operator is subject to a syntactic ambiguity
// In JavaScript: it can begin a block or an object literal. We wrap the text
// In parens to eliminate the ambiguity.
J = eval ('+ text + ')');
Return j;
}
// If the text is not JSON parseable, then a SyntaxError is thrown.
Throw new SyntaxError ('json _ decode ');
}
Function json_encode (mixed_val ){
// Returns the JSON representation of a value
//
// Version 906.1806
// Discuss at: http://phpjs.org/functions/json_encode
// + Original by: Public Domain (http://www.json.org/json2.js)
// + Reimplemented by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Improved by: T. J. Leahy
// * Example 1: json_encode (['E', {pluribus: 'unum'}]);
// * Returns 1: '[\ n "e", \ n {\ n "pluribus": "unum" \ n} \ n]'
/*
Http://www.JSON.org/json2.js
2008-11-19
Public Domain.
No warranty expressed or implied. use at your own risk.
See http://www.JSON.org/js.html
*/
Var json = this. window. JSON;
If (typeof json = 'object' & typeof json. stringify = 'function '){
Return json. stringify (mixed_val );
}
Var value = mixed_val;
Var quote = function (string ){
Var escapable =/[\\\ "\ u0000-\ u001f \ u007f-\ u009f \ u00ad \ u0600-\ Users \ u17b4 \ u17b5 \ u200c-\ u200f \ u2028- \ u202f \ u2060-\ u206f \ ufeff \ ufff0-\ uffff]/g;
Var meta = {// table of character substitutions
'\ B': '\ B ',
'\ T':' \ t ',
'\ N':' \ n ',
'\ F':' \ F ',
'\ R':' \ R ',
'"':'\\"',
'\\':'\\\\'
};
Escapable. lastIndex = 0;
Return escapable. test (string )?
'"' + String. replace (escapable, function (){
Var c = meta [a];
Return typeof c = 'string '? C:
'\ U' + ('000000' + a. charCodeAt (0). toString (16). slice (-4 );
}) + '"':
'"' + String + '"';
};
Var str = function (key, holder ){
Var gap = '';
Var indent = '';
Var I = 0; // The loop counter.
Var k = ''; // The member key.
Var v = ''; // The member value.
Var length = 0;
Var mind = gap;
Var partial = [];
Var value = holder [key];
// If the value has a toJSON method, call it to obtain a replacement value.
If (value & typeof value === 'object '&&
Typeof value. toJSON = 'function '){
Value = value. toJSON (key );
}
// What happens next depends on the value's type.
Switch (typeof value ){
Case 'string ':
Return quote (value );
Case 'number ':
// JSON numbers must be finite. Encode non-finite numbers as null.
Return isFinite (value )? String (value): 'null ';
Case 'boolean ':
Case 'null ':
// If the value is a boolean or null, convert it to a string. Note:
// Typeof null does not produce 'null'. The case is encoded here in
// The remote chance that this gets fixed someday.
Return String (value );
Case 'object ':
// If the type is 'object', we might be dealing with an object or an array or
// Null.
// Due to a specification blunder in ECMAScript, typeof null is 'object ',
// So watch out for that case.
If (! Value ){
Return 'null ';
}
// Make an array to hold the partial results of stringifying this object value.
Gap + = indent;
Partial = [];
// Is the value an array?
If (Object. prototype. toString. apply (value) = '[object Array]') {
// The value is an array. Stringify every element. Use null as a placeholder
// For non-JSON values.
Length = value. length;
For (I = 0; I <length; I + = 1 ){
Partial [I] = str (I, value) | 'null ';
}
// Join all of the elements together, separated with commas, and wrap them in
// Brackets.
V = partial. length = 0? '[]':
Gap? '[\ N' + gap +
Partial. join (', \ n' + gap) +' \ n' +
Mind + ']':
'[' + Partial. join (',') + ']';
Gap = mind;
Return v;
}
// Iterate through all of the keys in the object.
For (k in value ){
If (Object. hasOwnProperty. call (value, k )){
V = str (k, value );
If (v ){
Partial. push (quote (k) + (gap? ':') + V );
}
}
}
// Join all of the member texts together, separated with commas,
// And wrap them in braces.
V = partial. length = 0? '{}':
Gap? '{\ N' + gap + partial. join (', \ n' + gap) + '\ n' +
Mind + '}': '{' + partial. join (',') + '}';
Gap = mind;
Return v;
}
};
// Make a fake root object containing our value under the key ''.
// Return the result of stringifying the value.
Return str ('',{
'': Value
});
}
Savecookie ();
Readcookie ();
</Script>
Note that Chinese characters may be garbled. We recommend that you use base64 to encode and decode multi-byte characters and Chinese characters:
Copy codeThe Code is as follows:
<Script type = "text/javascript">
Function base64_decode (data ){
// Decodes string using MIME base64 algorithm
//
// Version 905.3122
// Discuss at: http://phpjs.org/functions/base64_decode
// + Original by: Taylor Akins (http://rumkin.com)
// + Improved by: Thunder. m
// + Input by: Aman Gupta
// + Improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Bugfixed by: Onno Marsman
// + Bugfixed by: Pellentesque Malesuada
// + Improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Input by: Brett Zamir (http://brett-zamir.me)
// + Bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
//-Depends on: utf8_decode
// * Example 1: base64_decode ('s2v2aw4gdmfuifpvbm5ldmvsza = ');
// * Returns 1: 'kevin van Zonneveld'
// Mozilla has this native
//-But breaks in 2.0.0.12!
// If (typeof this. window ['btoa'] = 'function '){
// Return btoa (data );
//}
Var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 +/= ";
Var o1, o2, o3, h1, h2, h3, h4, bits, I = 0, ac = 0, dec = "", tmp_arr = [];
If (! Data ){
Return data;
}
Data + = '';
Do {// unpack four hexets into three octets using index points in b64
H1 = b64.indexOf (data. charAt (I ++ ));
H2 = b64.indexOf (data. charAt (I ++ ));
H3 = b64.indexOf (data. charAt (I ++ ));
H4 = b64.indexOf (data. charAt (I ++ ));
Bits = h1 <18 | h2 <12 | h3 <6 | h4;
O1 = bits> 16 & 0xff;
O2 = bits> 8 & 0xff;
O3 = bits & 0xff;
If (h3 = 64 ){
Tmp_arr [ac ++] = String. fromCharCode (o1 );
} Else if (h4 = 64 ){
Tmp_arr [ac ++] = String. fromCharCode (o1, o2 );
} Else {
Tmp_arr [ac ++] = String. fromCharCode (o1, o2, o3 );
}
} While (I <data. length );
Dec = tmp_arr.join ('');
Dec = this. utf8_decode (dec );
Return dec;
}
Function base64_encode (data ){
// Encodes string using MIME base64 algorithm
//
// Version 905.2617
// Discuss at: http://phpjs.org/functions/base64_encode
// + Original by: Taylor Akins (http://rumkin.com)
// + Improved by: Bayron Guevara
// + Improved by: Thunder. m
// + Improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Bugfixed by: Pellentesque Malesuada
// + Improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
//-Depends on: utf8_encode
// * Example 1: base64_encode ('kevin van Zonneveld ');
// * Returns 1: 's2v2aw4gdmfuifpvbm5ldmvsza ='
// Mozilla has this native
//-But breaks in 2.0.0.12!
// If (typeof this. window ['atob'] = 'function '){
// Return atob (data );
//}
Var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 +/= ";
Var o1, o2, o3, h1, h2, h3, h4, bits, I = 0, ac = 0, enc = "", tmp_arr = [];
If (! Data ){
Return data;
}
Data = this. utf8_encode (data + '');
Do {// pack three octets into four hexets
O1 = data. charCodeAt (I ++ );
O2 = data. charCodeAt (I ++ );
O3 = data. charCodeAt (I ++ );
Bits = o1 <16 | o2 <8 | o3;
H1 = bits> 18 & 0x3f;
H2 = bits> 12 & 0x3f;
H3 = bits> 6 & 0x3f;
H4 = bits & 0x3f;
// Use hexets to index into b64, and append result to encoded string
Tmp_arr [ac ++] = b64.charAt (h1) + b64.charAt (h2) + b64.charAt (h3) + b64.charAt (h4 );
} While (I <data. length );
Enc = tmp_arr.join ('');
Switch (data. length % 3 ){
Case 1:
Enc = enc. slice (0,-2) + '= ';
Break;
Case 2:
Enc = enc. slice (0,-1) + '= ';
Break;
}
Return enc;
}
Function utf8_encode (argString ){
// Encodes an ISO-8859-1 string to UTF-8
//
// Version 905.1217
// Discuss at: http://phpjs.org/functions/utf8_encode
// + Original by: Webtoolkit.info (http://www.webtoolkit.info /)
// + Improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Improved by: sowberry
// + Tweaked by: Jack
// + Bugfixed by: Onno Marsman
// + Improved by: Yves Sucaet
// + Bugfixed by: Onno Marsman
// * Example 1: utf8_encode ('kevin van Zonneveld ');
// * Returns 1: 'kevin van Zonneveld'
Var string = (argString + ''). replace (/\ r \ n/g," \ n "). replace (/\ r/g," \ n ");
Var utftext = "";
Var start, end;
Var stringl = 0;
Start = end = 0;
Stringl = string. length;
For (var n = 0; n <stringl; n ++ ){
Var c1 = string. charCodeAt (n );
Var enc = null;
If (c1 <128 ){
End ++;
} Else if (c1> 127) & (c1 <2048 )){
Enc = String. fromCharCode (c1> 6) | 192) + String. fromCharCode (c1 & 63) | 128 );
} Else {
Enc = String. fromCharCode (c1> 12) | 224) + String. fromCharCode (c1> 6) & 63) | 128) + String. fromCharCode (c1 & 63) | 128 );
}
If (enc! = Null ){
If (end> start ){
Utftext + = string. substring (start, end );
}
Utftext + = enc;
Start = end = n + 1;
}
}
If (end> start ){
Utftext + = string. substring (start, string. length );
}
Return utftext;
}
Function utf8_decode (str_data ){
// Converts a UTF-8 encoded string to ISO-8859-1
//
// Version 905.3122
// Discuss at: http://phpjs.org/functions/utf8_decode
// + Original by: Webtoolkit.info (http://www.webtoolkit.info /)
// + Input by: Aman Gupta
// + Improved by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// + Improved by: Norman "zEh" Fuchs
// + Bugfixed by: hitwork
// + Bugfixed by: Onno Marsman
// + Input by: Brett Zamir (http://brett-zamir.me)
// + Bugfixed by: Kevin van Zonneveld (http://kevin.vanzonneveld.net)
// * Example 1: utf8_decode ('kevin van Zonneveld ');
// * Returns 1: 'kevin van Zonneveld'
Var tmp_arr = [], I = 0, ac = 0, c1 = 0, c2 = 0, c3 = 0;
Str_data + = '';
While (I <str_data.length ){
C1 = str_data.charCodeAt (I );
If (c1 <128 ){
Tmp_arr [ac ++] = String. fromCharCode (c1 );
I ++;
} Else if (c1> 191) & (c1 <224 )){
C2 = str_data.charCodeAt (I + 1 );
Tmp_arr [ac ++] = String. fromCharCode (c1 & 31) <6) | (c2 & 63 ));
I + = 2;
} Else {
C2 = str_data.charCodeAt (I + 1 );
C3 = str_data.charCodeAt (I + 2 );
Tmp_arr [ac ++] = String. fromCharCode (c1 & 15) <12) | (c2 & 63) <6) | (c3 & 63 ));
I + = 3;
}
}
Return tmp_arr.join ('');
}
</Script>
Base64_decode depends on utf8_decode, and base64_encode depends on utf8_encode.
PHP2JS is an open-source project that implements some PHP functions to JavaScript.