t-comm
Version:
专业、稳定、纯粹的工具库
100 lines (98 loc) • 2.98 kB
JavaScript
/**
* 多重解码。避免内嵌在外部时地址参数被编码,先进行URL解码再进行HTML字符实体解码
* @docgen
* @function decode
* @param {string} str 文本
* @returns 解码后的文本
*/
function decode(str) {
if (str === void 0) {
str = '';
}
if (!str) return str;
var text = decodeURIComponent(str);
// 含有实体符号 &,需要实体解码处理
var regex = /&/g;
if (regex.test(text)) {
text = text.replace(regex, '&');
}
return text;
}
/**
* 将参数对象转成字符串
* @docgen
* @function stringifyParams
* @param {Object} params 参数对象
* @returns {String}
*/
function stringifyParams(params) {
return Object.keys(params).reduce(function (acc, key) {
var value = params[key];
return "".concat(acc ? "".concat(acc, "&") : '').concat(key, "=").concat(value);
}, '');
}
/**
* 小程序不支持URL对象,用字符串拼接方式添加
* 注意:已有相同key不支持覆盖,会重复添加
* @docgen
* @function addUrlParam
* @param url 输入url
* @param key 键
* @param value 值
*/
function addUrlParam(url, key, value) {
var ret = url;
if (url.indexOf('?') !== -1) {
ret = "".concat(ret, "&").concat(key, "=").concat(value);
} else {
ret = "".concat(ret, "?").concat(key, "=").concat(value);
}
return ret;
}
/**
* 为url添加参数
*
* @export
* @param {string} url
* @param {object} params
* @param {boolean} [shouldOverride=false]
* @returns {string}
*/
function addUrlParams(url, params, shouldOverride) {
if (shouldOverride === void 0) {
shouldOverride = false;
}
// 使用正则表达式找到当前 URL 中的哈希部分
var hashPart = url.match(/#.*/);
var hash = hashPart ? hashPart[0] : '';
// 从原始 URL 中删除哈希部分
var mainUrl = url.replace(/#.*/, '');
var _a = mainUrl.split('?'),
baseUrl = _a[0],
originalQueryString = _a[1];
var originalParams = originalQueryString ? originalQueryString.split('&').reduce(function (acc, entry) {
var _a = entry.split('='),
key = _a[0],
value = _a[1];
acc[decodeURIComponent(key)] = decodeURIComponent(value);
return acc;
}, {}) : {};
// 向原始参数对象添加新参数,同时判断是否覆盖现有参数值
Object.entries(params).forEach(function (_a) {
var key = _a[0],
value = _a[1];
if (shouldOverride || !Object.prototype.hasOwnProperty.call(originalParams, key)) {
originalParams[key] = value;
}
});
// 将原始参数和新参数合并为查询字符串
var updatedQueryString = Object.entries(originalParams).map(function (_a) {
var key = _a[0],
value = _a[1];
return "".concat(encodeURIComponent(key), "=").concat(encodeURIComponent(value));
}).join('&');
// 拼接新的 URL
var updatedUrl = "".concat(baseUrl, "?").concat(updatedQueryString).concat(hash);
return updatedUrl;
}
export { addUrlParam, addUrlParams, decode, stringifyParams };