就我而言,我试图将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中有什么办法,我可以在从对象中获取字符时进行字符转义。
答案 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的定义中使用了“双引号”......但现在我觉得我不明白你想要什么。
如果你真的想要出现两个单引号,那么你可以使用“Jo \'\'hn”......为我工作。