JavaScript - 在JavaScript Object属性值中转义单引号

Kar*_*ran 6 javascript c# jquery json

在我的例子中,我试图将JavaScript对象动态地拆分为来自C#.NET代码的HTML标记.获取数据后,我准备字符串并在字符串中创建对象,然后将其吐出到HTML标记.

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA };
Run Code Online (Sandbox Code Playgroud)

稍后在其他一些操作中,例如按钮单击,我试图拉出firstname,它给了我一个JavaScript错误,因为firstname属性中的值没有被转义来处理单引号.虽然我可以在代码后端准备对象字符串时这样做,但我喜欢在客户端做一些事情.

var dv = $('#dv1')
dv.append(fileUploadDic.firstname);  //gives me error.
dv.append(fileUploadDic.lastname);
dv.append(fileUploadDic.country);
Run Code Online (Sandbox Code Playgroud)

在JavaScript中是否有任何方法,我可以在从对象中获取字符时进行字符转义.

http://jsfiddle.net/uagFu/8/

jmo*_*253 7

虽然您正在寻找一个客户端解决方案,但是最稳定可靠的方法是遵循您发送内容保守的鲁棒性原则,即使用服务器端JavaScriptSerializer来序列化您的C#将对象转换为JSON字符串.

这些库旨在解决这些问题,并且不再需要以特殊方式处理数据,因为它包含未终止的字符串文字,因此不需要人们使用API​​(在这种情况下,仅仅是你).

Employee oEmployee1 = 
   new Employee{Name="Pini",ID="111", Age="30"};

System.Web.Script.Serialization.JavaScriptSerializer oSerializer = 
     new System.Web.Script.Serialization.JavaScriptSerializer();
string sJSON = oSerializer.Serialize(oEmployee1);
Run Code Online (Sandbox Code Playgroud)

接下来,从您的AJAX请求返回客户端的sJSON,并像处理任何其他JSON字符串一样处理它.

有关详细信息和更多详细信息,请参阅使用JavaScriptSerializer在C#中将对象转换为JSON.


nnn*_*nnn 2

您显示的第一行代码不是有效的 JavaScript:

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA };
Run Code Online (Sandbox Code Playgroud)

因为字符串'Jo''hn'中不能有单引号。它必须是'Jo\'hn'"Jo'hn"。也就是说,如果你的 JS 字符串用单引号引起来,你必须用反斜杠转义字符串中的每个单引号字符,但如果你的 JS 字符串用双引号引起来,你可以在字符串中自由使用单引号。如果您想要连续两个单引号'Jo\'\'hn'"Jo''hn".

您无法修复此客户端,因为 JavaScript 无效,因此它将无法运行。

你必须在服务器端修复它;最简单的方法可能是使用反斜杠对其进行转义,请注意,如果它位于 C# 字符串中,您也需要转义反斜杠,以便浏览器的实际输出包含反斜杠:

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };"
Run Code Online (Sandbox Code Playgroud)