JavaScript 转义?

标签 javascript regex url

在解析到这样的对象之前,我要转义 & 和 =:

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));

我遇到解析错误

但似乎不起作用

有什么想法吗?

最佳答案

与其祈祷输出数据不包含任何会导致 JSON 解析器崩溃的内容,不如考虑这种基于 HTTP RFC 参数解析的方法。 RFC RFC (2616) 规定了以下规则:

  • 所有字段均以 & 分隔
  • 所有字段名称都在=之前,值在=之后,值是可选的
  • [] 表示“将其作为数组再添加一个元素”,

他们还初步建议了以下规则,我将为您提供选择: - 如果提交的话,不带 [] 的参数将覆盖其以前的版本(并非所有网络服务器都遵循这一点,顺便说一下,这是 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,用 & 连接所有元素即可。

关于JavaScript 转义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16219597/

相关文章:

javascript - 当兄弟存在时,为什么 nextElementSibling 和 nextSibling 为 null?

javascript - 使用正则表达式验证自定义表达式

regex - "diff"工具的正则表达式风格似乎缺乏?

python - 将字符串转换为有效的 url 内容

javascript - ASP Web Forms 根据条件触发事件背后的代码

javascript - 如果没有权限,Chrome 应用程序/扩展程序如何查看搜索/浏览历史记录?

javascript - 修复了滚动上的导航栏

java - 显式匹配模式 [] 或 [][] 的正则表达式。?

php - 如何手动创建友好 URL? (PHP)

javascript - url哈希片段格式