diff --git a/demo-album/lib/cos-wx-sdk-v5.js b/demo-album/lib/cos-wx-sdk-v5.js index 89302e7..410667b 100644 --- a/demo-album/lib/cos-wx-sdk-v5.js +++ b/demo-album/lib/cos-wx-sdk-v5.js @@ -8904,53 +8904,41 @@ module.exports.init = function (COS, task) { /* 18 */ /***/ (function(module, exports) { -var obj2str = function (obj) { - var i, key, val; - var list = []; - var keyList = Object.keys(obj); - for (i = 0; i < keyList.length; i++) { - key = keyList[i]; - val = obj[key] || ''; - list.push(key + '=' + encodeURIComponent(val)); - } - return list.join('&'); -}; +function camSafeUrlEncode(str) { + return encodeURIComponent(str) + .replace(/!/g, '%21') + .replace(/'/g, '%27') + .replace(/\(/g, '%28') + .replace(/\)/g, '%29') + .replace(/\*/g, '%2A'); +} -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; - case 'boolean': - return v ? 'true' : 'false'; - case 'number': - return isFinite(v) ? v : ''; - default: - return ''; +function getObjectKeys(obj, forKey) { + var list = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key); + } } + return list.sort(function (a, b) { + a = a.toLowerCase(); + b = b.toLowerCase(); + return a === b ? 0 : (a > b ? 1 : -1); + }); }; -var queryStringify = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } - if (typeof obj === 'object') { - return Object.keys(obj).map(function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (Array.isArray(obj[k])) { - return obj[k].map(function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).filter(Boolean).join(sep); - +var obj2str = function (obj) { + var i, key, val; + var list = []; + var keyList = getObjectKeys(obj); + for (i = 0; i < keyList.length; i++) { + key = keyList[i]; + val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]); + key = camSafeUrlEncode(key).toLowerCase(); + val = camSafeUrlEncode(val) || ''; + list.push(key + '=' + val) } - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); + return list.join('&'); }; var request = function (params, callback) { @@ -9028,7 +9016,7 @@ var request = function (params, callback) { }); }); } else { - var qsStr = params.qs && queryStringify(params.qs) || ''; + var qsStr = params.qs && obj2str(params.qs) || ''; if (qsStr) { url += (url.indexOf('?') > -1 ? '&' : '?') + qsStr; } diff --git a/demo/lib/cos-wx-sdk-v5.js b/demo/lib/cos-wx-sdk-v5.js index 89302e7..410667b 100644 --- a/demo/lib/cos-wx-sdk-v5.js +++ b/demo/lib/cos-wx-sdk-v5.js @@ -8904,53 +8904,41 @@ module.exports.init = function (COS, task) { /* 18 */ /***/ (function(module, exports) { -var obj2str = function (obj) { - var i, key, val; - var list = []; - var keyList = Object.keys(obj); - for (i = 0; i < keyList.length; i++) { - key = keyList[i]; - val = obj[key] || ''; - list.push(key + '=' + encodeURIComponent(val)); - } - return list.join('&'); -}; +function camSafeUrlEncode(str) { + return encodeURIComponent(str) + .replace(/!/g, '%21') + .replace(/'/g, '%27') + .replace(/\(/g, '%28') + .replace(/\)/g, '%29') + .replace(/\*/g, '%2A'); +} -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; - case 'boolean': - return v ? 'true' : 'false'; - case 'number': - return isFinite(v) ? v : ''; - default: - return ''; +function getObjectKeys(obj, forKey) { + var list = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key); + } } + return list.sort(function (a, b) { + a = a.toLowerCase(); + b = b.toLowerCase(); + return a === b ? 0 : (a > b ? 1 : -1); + }); }; -var queryStringify = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } - if (typeof obj === 'object') { - return Object.keys(obj).map(function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (Array.isArray(obj[k])) { - return obj[k].map(function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).filter(Boolean).join(sep); - +var obj2str = function (obj) { + var i, key, val; + var list = []; + var keyList = getObjectKeys(obj); + for (i = 0; i < keyList.length; i++) { + key = keyList[i]; + val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]); + key = camSafeUrlEncode(key).toLowerCase(); + val = camSafeUrlEncode(val) || ''; + list.push(key + '=' + val) } - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); + return list.join('&'); }; var request = function (params, callback) { @@ -9028,7 +9016,7 @@ var request = function (params, callback) { }); }); } else { - var qsStr = params.qs && queryStringify(params.qs) || ''; + var qsStr = params.qs && obj2str(params.qs) || ''; if (qsStr) { url += (url.indexOf('?') > -1 ? '&' : '?') + qsStr; } diff --git a/lib/request.js b/lib/request.js index 378ca9a..60b2d9f 100644 --- a/lib/request.js +++ b/lib/request.js @@ -1,50 +1,38 @@ -var obj2str = function (obj) { - var i, key, val; - var list = []; - var keyList = Object.keys(obj); - for (i = 0; i < keyList.length; i++) { - key = keyList[i]; - val = obj[key] || ''; - list.push(key + '=' + encodeURIComponent(val)); - } - return list.join('&'); -}; +function camSafeUrlEncode(str) { + return encodeURIComponent(str) + .replace(/!/g, '%21') + .replace(/'/g, '%27') + .replace(/\(/g, '%28') + .replace(/\)/g, '%29') + .replace(/\*/g, '%2A'); +} -var stringifyPrimitive = function(v) { - switch (typeof v) { - case 'string': - return v; - case 'boolean': - return v ? 'true' : 'false'; - case 'number': - return isFinite(v) ? v : ''; - default: - return ''; +function getObjectKeys(obj, forKey) { + var list = []; + for (var key in obj) { + if (obj.hasOwnProperty(key)) { + list.push(forKey ? camSafeUrlEncode(key).toLowerCase() : key); + } } + return list.sort(function (a, b) { + a = a.toLowerCase(); + b = b.toLowerCase(); + return a === b ? 0 : (a > b ? 1 : -1); + }); }; -var queryStringify = function(obj, sep, eq, name) { - sep = sep || '&'; - eq = eq || '='; - if (obj === null) { - obj = undefined; - } - if (typeof obj === 'object') { - return Object.keys(obj).map(function(k) { - var ks = encodeURIComponent(stringifyPrimitive(k)) + eq; - if (Array.isArray(obj[k])) { - return obj[k].map(function(v) { - return ks + encodeURIComponent(stringifyPrimitive(v)); - }).join(sep); - } else { - return ks + encodeURIComponent(stringifyPrimitive(obj[k])); - } - }).filter(Boolean).join(sep); - +var obj2str = function (obj) { + var i, key, val; + var list = []; + var keyList = getObjectKeys(obj); + for (i = 0; i < keyList.length; i++) { + key = keyList[i]; + val = (obj[key] === undefined || obj[key] === null) ? '' : ('' + obj[key]); + key = camSafeUrlEncode(key).toLowerCase(); + val = camSafeUrlEncode(val) || ''; + list.push(key + '=' + val) } - if (!name) return ''; - return encodeURIComponent(stringifyPrimitive(name)) + eq + - encodeURIComponent(stringifyPrimitive(obj)); + return list.join('&'); }; var request = function (params, callback) { @@ -122,7 +110,7 @@ var request = function (params, callback) { }); }); } else { - var qsStr = params.qs && queryStringify(params.qs) || ''; + var qsStr = params.qs && obj2str(params.qs) || ''; if (qsStr) { url += (url.indexOf('?') > -1 ? '&' : '?') + qsStr; }