【问题标题】:In my javascript, how can I fix this encoding issue between "\u0026", "&" and "&"?在我的 javascript 中,如何解决“\u0026”、“&”和“&”之间的编码问题?
【发布时间】:2015-06-24 16:21:48
【问题描述】:

我有一个 asp.net-mvc 网站,在我的一个视图中有以下代码:

var teams = <%= new JavaScriptSerializer().Serialize(Model.Names) %>;

Model.Names 是一个字符串数组和其中一个名称,一个团队有一个名称“Joe & Bob”,它在 html 中显示为:

 "Joe \u0026 Bob"

即使它在浏览器中显示为“Joe & Bob”

问题是我有另一行代码试图与“Joe & Bob”进行比较,但找不到。当我查看它为什么它失败的代码时,它只是吐出一个像这样的变量

 "<%= Model.Name %>",

在我看到的浏览器源代码中

"Joe & Bob" 

(代替乔 \u0026 Bob)

我试过这样做

   <%=Html.Encode(Model.Name); %>

所以我可以进行适当的比较,但我得到了:

 Joe &amp; Bob

代替乔\u0026鲍勃

我想获得一些建议,以最简洁的方式在浏览器源代码中获取相同的确切字符串,以便进行适当的比较。

【问题讨论】:

  • 您的另一行代码如何尝试与“Joe & Bob”进行比较。很有可能,这就是问题所在。
  • 同意,但这是在一个 jquery 插件中,所以我试图确保我的输入完全一致,以避免插件“弄错”的任何可能性
  • 即使在插件内部,我也想看看它是如何进行比较的。

标签: javascript html asp.net-mvc encoding javascriptserializer


【解决方案1】:

在 JavaScript 中“\u0026”完全等同于“&”,所以如果你在做一个 javascript 比较,这会很好:

console.log("Joe \u0026 Bob" == "Joe & Bob"); // true

但是如果你想用文本来表示这个字符串,你肯定希望它被 HTML 编码成&amp;amp;

<span class="name"><%=Html.Encode(Model.Name)%></name>

如果这样做,那么就 JavaScript 而言,DOM 元素的文本值仍应为“Joe & Bob”:

console.log($('.name').text()); // "Joe & Bob"
console.log($('.name').text() == "Joe & Bob"); // true
console.log($('.name').text() == "Joe \u0026 Bob"); // true

【讨论】:

  • 感谢您的更新。我认为根本原因是 jquery 插件如何处理它,所以我试图消除它是不同字符串的任何可能性。在 C# 中,如何将 '\u0026' 转换为 '&'?
  • @leora:你考虑过使用 JSON.NET 来序列化你的 json 吗?它不会尝试将“&”之类的值转换为 unicode 代码。尽管如此,我还是很难理解 jQuery 插件是如何以错误的方式看到这一点的,因为 JavaScript 中的内存中字符串将具有完全相同的值。
  • 原来整个编码的事情是一个完整的红鲱鱼。 .根本问题完全不相关:( .. 无论如何感谢您的帮助。我会接受你的回答
  • @leora:我认为可能是这样。祝你好运。
猜你喜欢
  • 2021-10-11
  • 1970-01-01
  • 2012-11-09
  • 1970-01-01
  • 1970-01-01
  • 2017-10-03
  • 1970-01-01
  • 2021-03-02
  • 2012-02-29
相关资源
最近更新 更多