HTML编码的字符串可以转换为JSON吗?

时间:2013-05-01 17:39:47

标签: javascript jquery json html-encode

我从服务器获取编码数据,使用.NET WebUtility.HtmlEncode编码。

然后显示此数据,需要将其发送回服务器以进行某些操作。在此期间,在使用JSON.stringify发送之前,它将转换为JSON。到目前为止一切正常。

然而,一旦到达服务器,它就会因为潜在的危险而被拒绝。转换为JSON的对象可以包含具有特殊字符的字符串,例如 -

“这是John&#39s帐户”最初“这是John的帐户”

或“约翰在&#165中获得”最初“约翰以¥收入”

我认为这些编码的字符串值会干扰正确形成的JSON。

Javascript中有什么方法可以JSONify HTML编码的字符串吗?

编辑:如果不清楚,当我执行JSON.stringify(数据)时,数据已经被编码。 我的数据的一个例子 -

row [0] = {column1,column2,column3} 每列都是HTML编码的字符串,例如“This is John&#39s account”

3 个答案:

答案 0 :(得分:0)

考虑带有字符串的JSON对象看起来像这样

{ 'member1' : 'some string with &#165' }

我不相信这是JSON的错。您更有可能通过GET而不是POST将JSON对象传递给方法。

作为一个特例,如果您通过GET方法提交JSON并且未指定允许GET行为,Microsoft MVC3框架将抛出​​一个关于它不安全的错误。

可以在this answer.

中看到原因

答案 1 :(得分:0)

我认为您可以通过三个步骤实现此功能:

  1. 创建局部视图。
  2. 通过在其中传递字符串值并在那里执行操作来调用此部分视图。
  3. 通过JSON返回部分视图,并将其替换为旧视图。
  4. 但是通过JSON返回局部视图有点棘手,我的意思是你不能只通过JSON返回局部视图。首先,您需要转换字符串中的局部视图并返回此字符串。下面的方法将告诉你如何实现这个目标:

        public string RenderRazorViewToString(string viewName, object model)
        {
            ViewData.Model = model;
            using (var sw = new StringWriter())
            {
                var viewResult = ViewEngines.Engines.FindPartialView(ControllerContext, viewName);
                var viewContext = new ViewContext(ControllerContext, viewResult.View, ViewData, TempData, sw);
                viewResult.View.Render(viewContext, sw);
                viewResult.ViewEngine.ReleaseView(ControllerContext, viewResult.View);
                return sw.GetStringBuilder().ToString();
            }
        }
    

    此方法将转换字符串中的局部视图,并通过JSON将其返回给服务器。您需要传递给它中的参数,首先是部分视图名称,第二个是模型。希望你能解决问题。

答案 2 :(得分:0)

最终的解决方案更像是一个黑客,我添加了一个注释 -

[ValidateInput(假)]

到后端的我的函数,以便它不会尝试验证我的JSON字符串。