【问题标题】:URL Param: Line break %0A causing JSON.parse to chokeURL 参数:换行 %0A 导致 JSON.parse 阻塞
【发布时间】:2025-12-28 20:25:13
【问题描述】:

我正在从 URL 中编码的文本区域解析多行值:

// URL Params:
?cn=asdf%20asdf&pn=asdf%20asdf&pe=asdf%40example.com&d=asdf%0A%0Aasdf&ye=test%40example.com&c=1234&tc=true

// JAVASCRIPT
var _url = window.location.href;
var _queryParams = decodeURIComponent( _url.split('?')[1] );
var _search = _queryParams;//location.search.substring(1);
var _data = JSON.parse('{"' + decodeURI(_search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g,'":"') + '"}');

但是每当我在上面的d= URL 参数中有一个多行文本值时,我就会从JSON.parse() 函数中得到一个Syntax Error: Unexpected token... 错误:

&d=asdf%0A%0Aasdf

我需要做什么.replace() 正则表达式模式来处理换行编码%0A

编辑: 我已经成功地将 URL 参数转换为 javascript 对象。问题是内部的replace([pattern match]) 函数被多行文本字符阻塞:%0A

【问题讨论】:

  • 你为什么首先使用JSON.parse?这不是 JSON 格式的字符串。
  • 我正在将 URL 参数转换为 json 对象。
  • 没有。它已经可以很好地解析为 JSON 对象。问题具体是如何成功解码换行码。

标签: javascript json regex urlencode


【解决方案1】:

使用URLSearchParams解析查询字符串,然后使用URLSearchParamsentries方法将其转为纯Javascript对象,然后将其字符串化为JSON格式的字符串:

const queryString = '?cn=asdf%20asdf&pn=asdf%20asdf&pe=asdf%40example.com&d=asdf%0A%0Aasdf&ye=test%40example.com&c=1234&tc=true';
const params = new URLSearchParams(queryString);
console.log(params.get('d'));
const queryObj = {};
for (const [key, val] of params.entries()) {
  queryObj[key] = val;
}
console.log(JSON.stringify(queryObj));

【讨论】:

  • 很好的解决方案。我试试看。