【问题标题】:url decodeing dash and underscoreurl 解码破折号和下划线
【发布时间】:2011-05-19 20:08:30
【问题描述】:

我正在尝试为 Ajax 站点推荐一种人类可读的 URL 结构。我喜欢使用破折号或下划线来表示多个单词。

例如:http://www.mysite/Kent-Smith/

挑战在于我们在系统中有一堆多词关键字,我们通过 url 过滤这些关键字可能带有破折号或下划线。 (我猜我们系统中的一些金融代码确实使用下划线)。

我是否停留在事物的解码方面?我必须使用 %20 吗?

谢谢!

【问题讨论】:

  • 继续在你的 URL 中使用 - 和 _ (你真正要问的是, %20 用于编码空格)
  • 我想我的问题归结为如果我们使用破折号作为分隔符,然后我们想要制作成 url 的项目之一是连字符名称“smith-jones”会发生什么?

标签: language-agnostic url-encoding


【解决方案1】:

我认为你会做的是:

  1. 有一个指定的“转义”字符 - \(反斜杠)对此很常见
  2. 编码时,首先将所有\ 替换为\\,然后将所有- 替换为\-,然后将所有空格替换为破折号。 (这里的顺序很重要!)
  3. 解码时,首先将所有不以\ 开头的破折号替换为空格,然后将所有\- 替换为-,然后将所有\\ 替换为\。

例如:说你的名字是Jo\hn Smith-Jones(我知道有些人的名字中间不太可能有反斜杠,但是......)

然后你编码:用\\替换\:Jo\\hn Smith-Jones

现在将- 替换为\-:Jo\\hn Smith\-Jones

现在用破折号替换空格:Joh\\n-Smith\-Jones(最终结果)

这确实会导致编码结果中间出现奇怪的反斜杠,但前提是首先有标点符号,所以这相对不常见。

等等,我又想到了一件事。反斜杠可能不适用于 URL,因此可以使用不同的字符 - 过程仍然完全相同,只需将反斜杠替换为其他任何内容。

黑客愉快!

【讨论】:

    【解决方案2】:

    我建议你使用空格,在 URL 中将它们编码为+,并保持连字符不变:

    http://example.com/John+Smith-Jones/

    【讨论】:

      猜你喜欢
      • 2010-09-12
      • 2011-02-14
      • 1970-01-01
      • 2010-11-19
      • 2011-12-24
      • 2013-03-22
      • 1970-01-01
      • 2015-07-10
      • 1970-01-01
      相关资源
      最近更新 更多