2012-05-18 56 views
6

在我的情况下,我试图将JavaScript对象动态地从C#.NET代码的HTML标记中分离出来。获取数据后,我准备字符串并在字符串中创建对象,然后将其吐到HTML标记中。JavaScript - 在JavaScript对象属性值中转义单引号

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA }; 

后来在一些其他的动作,如单击按钮,我试图拉名字,和它给了我一个JavaScript错误,因为在firstname的属性值没有逃过来处理单引号。尽管我可以在代码后端准备对象字符串时做到这一点,但我喜欢在客户端做一些事情。

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

在JavaScript中有什么方法可以在从对象中获取字符时进行字符转义。

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

+0

怎么样var fileUploadDic = {'firstname':“Jo'hn”,'lastname':'Macy','country':'USA'}; ? – jimpic

回答

2

的第一行代码你看是不是有效的JavaScript:

var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA }; 

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

没有办法解决这个客户端问题,因为无效的JavaScript将无法运行。

你必须解决它的服务器端;最简单的方法可能是用一个反斜杠逃脱它,并指出,如果这是在C#字符串你需要转义反斜线也使得实际的输出到浏览器包含一个反斜杠:

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };" 
+0

所以我们无法在创建对象后修复客户端上的对象。 – Karan

+0

否。对象永远不会在客户端创建,因为语法错误会阻止代码运行。 – nnnnnn

0

你可以使用\” ...

jsfiddle

这是你想要的吗? 实际上,似乎只用一个引号就没有任何转义,因为你在jsfiddle中使用了“双引号定义”,但现在我认为我不明白你想要什么

如果你真的希望两个单引号出现,那么你可以使用“乔\‘\’HN” ......为我工作的

2

在字符串中,你准备使用:

"var fileUploadDic = { 'firstname': 'Jo\\'hn', 'lastname' : 'Macy' , 'country' : 'USA };" 

现在客户端,将看起来像:

var fileUploadDic = { 'firstname': 'Jo\'hn', 'lastname' : 'Macy' , 'country' : 'USA }; 

如果你想更换''客户端可以使用[varstr].replace(/''/g,"\\'"),但我认为客户端就太晚了(错误已经被扔在发送字符串的到来和解释)

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

接下来,从您的AJAX请求返回sJSON回客户端,它的过程,就像任何其他的JSON字符串。

请参阅Convert Objects to JSON in C# Using JavaScriptSerializer了解更多信息和更多详细信息。

+0

这是一个很好的答案。 – joshp