【问题标题】:Should I use Replace() instead of HtmlEncode()?我应该使用 Replace() 而不是 HtmlEncode() 吗?
【发布时间】:2010-09-28 14:09:43
【问题描述】:

是否应该放弃 HtmlEncode() 并使用 Replace() 而不是我想解析帖子/cmets 中的链接(使用正则表达式)? HtmlEncode() 将 & 替换为 &我认为这可能会导致链接出现问题,我是否应该使用 Replace() 将

例如,如果用户发布以下内容:
见本站http://www.somesite.com/somepage.aspx?qs1=1&qs2=2&qs3=3

我希望它是:
看到这个网站http://www.somesite.com/somepage.aspx?qs1=1&qs2=2&qs3=3</a&gt;

但是使用 HtmlEncode(),URL 将变为(注意与号):
见本站http://www.somesite.com/somepage.aspx?qs1=1&amp;qs2=2&amp;qs3=3

我应该改用 Replace() 来避免这个问题吗?

谢谢

【问题讨论】:

  • 可能需要检查您的格式 - 在代码示例上使用四空格缩进来触发代码格式(缩进的文本将自动为您编码,并包含在
     标记中)。现在,有点难以分辨哪些代码是您原始示例的一部分(与为网站添加的代码相比)。

标签: asp.net


【解决方案1】:

我建议不要使用 Replace 来完成 HTMLEncode 或 URLEncode 的工作。这些功能是定制设计的,可以解决您在用户输入的内容中看到的大多数问题,如果您尝试用自己的代码替换它们,如果您忘记了,结果可能会变得很难看(我在这里是根据经验说话)重要的东西。

【讨论】:

    【解决方案2】:

    将 & 替换为 & href 属性内部是正确的。如果你不这样做,那么你的代码在技术上是无效的。此外,即使它在链接内,您也应该将其转义。唯一会遇到问题的情况是,如果您最终多次对其进行 HTMLEncoding。

    【讨论】:

      【解决方案3】:

      实际上,您的最后一个示例(您担心的那个)是唯一正确的示例。在 HTML 文档中,& 符号用于引入实体引用,因此必须进行转义。虽然大多数浏览器在不明显属于实体引用的情况下允许它们通过,但如果它们在 URL 中的使用恰好看起来像实体,您可能会遇到微妙的问题。

      HtmlEncode() 完成它的工作。

      【讨论】:

        【解决方案4】:

        也许您正在寻找 UrlEncode()? http://msdn.microsoft.com/en-us/library/zttxte6w.aspx

        【讨论】:

        • @shog9:为什么只有用户输入?
        • @AnthonyWJones:这是问题的主题。当然,它也可以用于其他文本(尚未编码) - 但无论如何,它只对编码查询字符串的文本位有用,而不是用于将整个 URL 用作 URL。
        【解决方案5】:

        您希望替换什么,为什么? HtmlEncode() 通常用于清理用户提供的数据。也就是说,如果您允许用户提交链接,您可能一开始就不想对它们进行 HtmlEncode。您基本上将完全按照用户提供的方式呈现它们。

        【讨论】:

          猜你喜欢
          • 2022-06-23
          • 1970-01-01
          • 2023-03-15
          • 2011-03-02
          • 1970-01-01
          • 1970-01-01
          • 2011-05-04
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多