URL 参数:换行符 %0A 导致 JSON.parse 阻塞
URL Param: Line break %0A causing JSON.parse to choke
我正在从 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
.
使用 URLSearchParams
解析查询字符串,然后使用 URLSearchParams
的 entries
方法将其变成普通的 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));
我正在从 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
.
使用 URLSearchParams
解析查询字符串,然后使用 URLSearchParams
的 entries
方法将其变成普通的 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));