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

时间:2012-05-18 06:24:27

标签: c# javascript jquery json

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

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/

4 个答案:

答案 0 :(得分:7)

虽然您正在寻找一种客户端解决方案,但是最稳定可靠的方法是遵守您发送的内容Robustness Principle保守的方法 - 使用服务器 - 用于将C#对象序列化为JSON字符串的JavaScriptSerializer。

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

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

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

有关详情和详情,请参阅Convert Objects to JSON in C# Using JavaScriptSerializer

答案 1 :(得分:2)

在您准备的字符串中使用:

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

现在客户端看起来像:

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

如果要替换''客户端,可以使用[varstr].replace(/''/g,"\\'"),但我认为客户端太迟了(错误已经在到达时抛出并解释了发送的字符串)

答案 2 :(得分: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 };"

答案 3 :(得分:0)

您可以使用\'...

jsfiddle

这就是你想要的吗? 实际上似乎只使用单引号就没有逃避,因为你在jsfiddle的定义中使用了“双引号”......但现在我觉得我不明白你想要什么。

如果你真的想要出现两个单引号,那么你可以使用“Jo \'\'hn”......为我工作。