JavaScript - 转义 JavaScript Object 属性值中的单引号
本文关键字:JavaScript 单引号 属性 转义 Object | 更新日期: 2023-09-27 18:34:44
就我而言,我正在尝试将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/
尽管您正在寻找客户端解决方案,但最稳定和可靠的方法是使用服务器端 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);
接下来,将 sJSON 从 AJAX 请求返回到客户端,并像处理任何其他 JSON 字符串一样处理它。
有关详细信息,请参阅使用 JavaScriptSerializer 在 C# 中将对象转换为 JSON。
你显示的第一行代码不是有效的 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 };"
在你准备的字符串中使用:
"var fileUploadDic = { 'firstname': 'Jo'''hn', 'lastname' : 'Macy' , 'country' : 'USA };"
现在客户端将如下所示:
var fileUploadDic = { 'firstname': 'Jo''hn', 'lastname' : 'Macy' , 'country' : 'USA };
如果你想替换客户端''
你可以使用[varstr].replace(/''/g,"'''")
,但我认为客户端为时已晚(错误已经在到达时抛出并解释发送的字符串(
使用'''...
斯菲德尔
这就是你想要的吗?实际上似乎完全无法转义仅使用单引号,因为您在 jsfiddle 的定义中使用了" 双引号......但现在我想我不明白你想要什么。
如果你真的想要出现两个单引号,那么你可以使用"Jo''''''hn"...为我工作。