2013-04-25 53 views
0

我逃避&和=解析到一个对象像这样前:JavaScript unescape?

var obb = parseJSON('{"' + text.replace(/&/g, "\",\"").replace(/=/g,"\":\"") + '"}'); 

当对象被创建,我得到:

obb.name 
obb.date 
obb.text 

内obb.text我想恢复上面做了逃生..

我已经试过:

text.replace(/\&/g, "&").replace(/\=/g, "=") 

当我运行obb.text

obb.text = decodeURIComponent(escape(obb.text)); 

下面我得到解析错误

但似乎并没有工作

任何想法?

+4

什么是你想实现什么?你的投入和预期产出是什么?我有一种感觉,你不需要做你正在做的事情。 – 2013-04-25 16:05:54

+0

从开始文本是这样一个网址:name = hello&date = 2013&text = hello = bye bye? %LALALA“AA” ....所以text.text可以包含各种字符这就是为什么我试图处理它们,所以我没有得到分析错误 – Alosyius 2013-04-25 16:07:54

+1

为什么不干脆[URI编码(HTTPS://developer.mozilla .org/en-US/docs/JavaScript/Reference/Global_Objects/encodeURI)他们? – ajp15243 2013-04-25 16:10:12

回答

1

只要你的文字参数总是在字符串的结尾,你可以做这样的事情:

var obb = {}; 
obb.name = text.match(/name=([^&]+)/)[1]; 
obb.date = text.match(/date=([^&]+)/)[1]; 
obb.text = text.match(/text=(.+)/)[1]; 

DEMO

+0

这似乎工作:)伟大的东西! – Alosyius 2013-04-25 17:10:43

2

与传统数据不包含任何会导致JSON解析器禁用的内容相比,请考虑基于HTTP RFC参数解析的此方法。的RFC RFC(2616)规定的规则如下:

  • 所有字段都受到&
  • 所有字段名称是一个=之前分离,值=之后,值是可选的
  • []表示“一个更元素,这是一个数组”,

他们还初步提出了以下规则,我会为您提供一个选择: - 一个参数,而[]覆盖,如果提交了其以前的版本(这不跟所有的网络服务器和无光泽r的HTTP碎片/污染攻击,顺便说一句)

我们要解析这个确切的结构,假设东西已经正确的字符编码。代码的开始应该是这样的:

var myObj = {}; 
var k = myPostbackContent.split("&"); 
for (var i = 0; i < k.length; i++) { 
    var kinfo = k[i].split("="); 
    var key = kinfo[0]; 
    if (kinfo[1] !== undefined) { 
    var value = kinfo[1]; 
    }; 
    if (key.substr(-2) == "[]") { 
    key = key.substr(0,key.length-2); 
    if (myObj[key] === undefined) myObj[key] = []; 
    if (myObj[key] instanceof Array) myObj[key].push(value); 
    } 
    else { 

以下部分取决于你的假设:

  • 如果你想你的元素相互覆盖,放于else以下版本:

    myObj[key] = value; 
    
  • 相反,如果您希望有一个元素的第一个实例具有优先级,把下面的:

    if (myObj[key] === undefined) myObj[key] = value; 
    
  • 如果像IIS,你宁愿有元件自动追加到一个由,分隔字符串,请使用下列内容:

    if (myObj[key].length) myObj[key] += ","; 
    myObj[key] += value; 
    

我已经建立了一个小TinkerIO脚本来告诉你如何所有三个作品。如果这不是你想要的,请告诉我。顺便说一句,默认行为是“覆盖”。

这种方法可以在反向被施加从对象到去一个URI编码的字符串,通过的方式。只需循环访问对象的属性,然后按key = value,使用&加入所有元素。