Zum Hauptinhalt springen
claw
am
tools
Werkzeuge
Dokumente
Daoark
EN
Startseite
Startseite
/
Entwicklerwerkzeuge
›
Startseite
manifest.json
/g, '>'); } function parseQuery(url) { var qIdx = url.indexOf('?'); if (qIdx < 0) return { base: url, params: [] }; var base = url.substring(0, qIdx); var qs = url.substring(qIdx + 1); // 去掉 fragment var hIdx = qs.indexOf('#'); var frag = ''; if (hIdx >= 0) { frag = qs.substring(hIdx); qs = qs.substring(0, hIdx); } var pairs = qs.split('&').filter(function(s) { return s.length > 0; }); var params = pairs.map(function(p) { var eq = p.indexOf('='); var k = eq < 0 ? p : p.substring(0, eq); var v = eq < 0 ? '' : p.substring(eq + 1); try { k = decodeURIComponent(k.replace(/\+/g, ' ')); } catch (e) {} try { v = decodeURIComponent(v.replace(/\+/g, ' ')); } catch (e) {} return { key: k, value: v }; }); return { base: base, params: params, fragment: frag }; } function isUTM(k) { return /^utm_/i.test(k); } function doProcess() { try { var op = getVal('op'); var textA = getVal('text-a'); if (!textA && op !== 'build') { showError('请输入文本'); return; } if (op === 'enc-comp') { var out = encodeURIComponent(textA); showResult(escHtml(out), 'encodeURIComponent 编码,输入 ' + textA.length + ' 字符,输出 ' + out.length + ' 字符'); } else if (op === 'enc-uri') { try { var out2 = encodeURI(textA); showResult(escHtml(out2), 'encodeURI 编码,保留 URL 结构字符,输入 ' + textA.length + ' 字符,输出 ' + out2.length + ' 字符'); } catch (e) { showError('encodeURI 失败: ' + e.message); } } else if (op === 'dec') { try { var out3 = decodeURIComponent(textA); showResult(escHtml(out3), 'decodeURIComponent 解码,输入 ' + textA.length + ' 字符,输出 ' + out3.length + ' 字符'); } catch (e) { showError('解码失败,可能不是合法的 URL 编码: ' + e.message); } } else if (op === 'parse') { var parsed = parseQuery(textA); if (parsed.params.length === 0) { showResult('
未发现 Query 参数(URL 中没有 ?)
', '基础 URL: ' + escHtml(parsed.base) + (parsed.fragment || '')); return; } var html = '
#
键
值
类型
'; for (var i = 0; i < parsed.params.length; i++) { var p = parsed.params[i]; var tag = isUTM(p.key) ? '
UTM
' : ''; html += '
' + (i+1) + '
' + escHtml(p.key) + '
' + tag + '
' + escHtml(p.value) + '
' + (p.value.length > 0 ? 'string' : 'empty') + '
'; } html += '
'; var meta = '基础: ' + parsed.base + (parsed.fragment || '') + ' | 共 ' + parsed.params.length + ' 个参数'; var utmCount = parsed.params.filter(function(p) { return isUTM(p.key); }).length; if (utmCount > 0) meta += ',含 ' + utmCount + ' 个 UTM 参数'; showResult(html, meta); } else if (op === 'build') { var textB = getVal('text-b'); if (!textB) { showError('请输入键值对'); return; } var baseUrl = textA.trim(); var lines = textB.split('\n').map(function(s) { return s.trim(); }).filter(function(s) { return s.length > 0; }); var pairs2 = []; for (var k = 0; k < lines.length; k++) { var line = lines[k]; var eq2 = line.indexOf('='); var kk = eq2 < 0 ? line : line.substring(0, eq2); var vv = eq2 < 0 ? '' : line.substring(eq2 + 1); pairs2.push(encodeURIComponent(kk) + '=' + encodeURIComponent(vv)); } if (pairs2.length === 0) { showError('键值对为空'); return; } var sep = baseUrl.indexOf('?') >= 0 ? '&' : '?'; var built = baseUrl + sep + pairs2.join('&'); showResult(escHtml(built), '构建 URL,基础 ' + baseUrl.length + ' 字符,加入 ' + pairs2.length + ' 个参数,总长 ' + built.length); } else { showError('未知操作: ' + op); } } catch (e) { showError('处理失败: ' + (e.message || e)); } } function syncKVVisibility() { var op = getVal('op'); var grp = $('kv-group'); if (op === 'build') { grp.hidden = false; grp.style.display = 'block'; } else { grp.hidden = true; grp.style.display = 'none'; } } $('op').addEventListener('change', syncKVVisibility); syncKVVisibility(); $('btn-main').addEventListener('click', function(e) { e.preventDefault(); doProcess(); }); $('btn-clear').addEventListener('click', function() { var inputs = document.querySelectorAll('input,textarea,select'); for (var i = 0; i < inputs.length; i++) { if (inputs[i].tagName === 'SELECT') inputs[i].selectedIndex = 0; else inputs[i].value = ''; } var ra = $('result-area'); ra.hidden = true; ra.style.display = 'none'; var em = $('error-msg'); em.hidden = true; em.style.display = 'none'; syncKVVisibility(); }); })();