【问题标题】:HttpUtility.UrlEncode - Minus instead of plus?HttpUtility.UrlEncode - 减号而不是加号?
【发布时间】:2023-04-07 05:21:01
【问题描述】:

我处于一个我有一些路径的情况。此路径可能类似于“jadajada.com/My Site.html”。

我使用 HttpUtility.UrlEncode 对 url 进行编码,这很棒。但是,我有一个问题,每当我有空格时,它都会用“+”号替换它。我需要一个“-”号代替。

这个方法可以执行这个任务吗?如果是这样,什么样的编码等。

(是的,我知道您可以使用 string.Replace,但现在请避免使用该解决方案 ;-)

【问题讨论】:

  • 您为什么要这样做?这就是 URL 编码的工作原理。
  • 为什么要将符合所有标准的有效且正确编码的 url(使用 + 符号表示空白)转换为非标准的东西?
  • 一个网址在空格之间使用“-”而不是“+”更易读。有些人认为它也会影响 SEO(这是没有人确切知道的)。
  • 如果您关心可读性和 SEO,您可能希望在/而不是 url 编码之前实际 slugify

标签: c# .net url .net-4.0 urlencode


【解决方案1】:

您希望将其从 + 更改为 - 的一个原因是当 URL 包含 + 时 URL 重写不起作用(除非您完全禁用双重转义)。将 + 更改为 - 更容易

【讨论】:

    【解决方案2】:

    UrlEncoding 永远不会单独用 - 替换空格,因为这不是 URL 内空格的表示。它将使用 + 或 %20。

    所以如果你真的想这样做,我认为string.Replace 是你最好的选择,但如果你不想在结果 URL 中有空格,你应该在编码之前从 URL 中删除空格第一名。

    【讨论】:

      【解决方案3】:

      可以将空格编码为+%20。这就是空格的编码方式,因此没有内置方法可以将其编码为任何其他任意字符。

      如果你想用- 替换空格而不是编码,它正在替换,所以Replace 方法适合使用。

      【讨论】:

        【解决方案4】:

        "-" 替换空格并不是真正的编码,因为没有标准的解码器; "+" 是正确的。

        但是,如果这仅用于显示,并且只要您的代码不依赖此值(例如,进行精确的 slug 匹配,期望 空格) 你可以在编码之前简单地做一个.Replace(" ","-")。在那种有损场景中,您可能还想替换一些其他的、截断过长的字符串等。

        一旦有 - 就对其进行编码应该是无操作的(即它不会改变)。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-02-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-01-04
          • 1970-01-01
          • 1970-01-01
          • 2018-12-21
          相关资源
          最近更新 更多