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/

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

尽管您正在寻找客户端解决方案,但最稳定和可靠的方法是使用服务器端 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"...为我工作。