【问题标题】:Standard token for encoding parentheses for HTML Ids?用于编码 HTML Id 括号的标准令牌?
【发布时间】:2011-06-15 14:19:15
【问题描述】:

我必须对字符串进行编码以删除 HTML 元素 ID 的括号。

括号((,))在 HTML Id 中无效,是否有标准字符串(如 those used in URLs)可供使用?

有没有可以在 ASP.NET MVC 中使用的现有方法?

注意System.Web.Mvc.HttpUtility.HtmlEncode(string),不编码括号。

【问题讨论】:

  • 在什么情况下括号会自然出现在您的 ID 中?
  • 如果您查看包含使用collectionName[index] 方法访问它的集合的Linq 表达式的主体,该函数将返回collectionName.get_Item(index)
  • 看起来你可能正在做一些聪明的动态事情!
  • 还有潜在的危险——Id 属性很容易被破解。
  • +1 你是对的。我忙于思考问题的答案,而不是问是否应该这样做!

标签: c# html asp.net-mvc asp.net-mvc-3 markup


【解决方案1】:

根据 HTML 规范(和 this question about id's),HTML id 属性中不允许使用括号。如果需要,可以使用字符串替换,例如:

//  ( = 'op--'  Opening Parenthesis
//  ) = 'cp--'  Closing Parenthesis

string id = "collectionName.get_Item(index)";

// encode
string encodedId = id.Replace("(", "op--").Replace(")", "cp--");

// decode
string decodedId = encodedId.Replace("op--", "(").Replace("cp--", ")");

【讨论】:

  • 这听起来是最好的方法,尤其是能够让UrlDecode() 进行解码。
  • 酷。好吧,现在我们有两个基本相同的答案,我认为它们可能都是正确的。
  • 有什么标准的token可以使用吗?
  • @StuperUser - 不,没有任何标准标记用于表示 HTML id 元素中的括号 - 如果你需要它们,你必须自己编码/解码它们:o/跨度>
  • @Dommer - :o) 我想你先明白了 ;o)
【解决方案2】:

我不认为我理解这个问题,因为感觉答案是替换[]。甚至是您提供的 Wikipedia 链接中的 %28%29

我是不是抓错了棍子的一端?

编辑:根据 cmets 中的说法,%28%29 似乎不行,因为 % 字符也无效,在这种情况下,您可以选择不会出现的替代品其他地方。

例如,( 之类的东西变成了---28---(甚至是---openbracket---),或者您可以保证不会出现在 ID 的其他位置的其他东西(这应该是可能的)。

【讨论】:

  • 你说得对,Dommer,我想知道 Html Id 是否有比 URL 代码更标准的东西。
  • 我不明白如何对它们进行编码:括号('(' 和 ')')百分比字符 '%' 都不是 valid characters in an HTML Id attribute
  • 在这种情况下,看起来需要某种替代,这总是有点冒险。像( 这样的东西变成---28---(甚至是---openbracket---)或者其他你可以保证不会出现在ID 中的其他东西。
  • 有什么标准的token可以使用吗?
  • 在这种情况下,使用--openbracket----ob----closebracket----cb-- 之类的东西会更安全。您显然可以根据自己的情况对此进行调整 - 因为这会导致 getItem(openbracket) 出现问题;-p
【解决方案3】:

如果元素是动态创建的,那为什么不直接在 id 上做一个 .Replace 来改变括号,比如下划线?

如果元素不是动态创建的,那么为什么它们的 id 中有括号?!

【讨论】:

  • 它们是动态创建的。使用_ 是不可取的,因为它不是标准的,可能会用于id 的其他部分,因此无法准确解码。
  • id 是否遵循正则表达式可用于匹配 id 内部部分的模式,例如括号中的数字?括号是否出现在字符串中的可预测位置?如果没有,那么使用给出的任何解决方案,您都需要确保检查 id 中不存在新的魔法字符,如果存在则将其转义。
猜你喜欢
  • 2016-01-23
  • 1970-01-01
  • 2012-09-30
  • 2020-03-19
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
相关资源
最近更新 更多