代码之家  ›  专栏  ›  技术社区  ›  Cudos

URL的适当替换

  •  0
  • Cudos  · 技术社区  · 15 年前

    快一号。

    我正在使用mod rewrite并准备了大多数替换:

    • 空空间 = _
    • æ = ae
    • Æ = 声发射

    等等。

    什么是自然的替代品 / ?

    谢谢

    3 回复  |  直到 15 年前
        1
  •  2
  •   Gumbo    15 年前

    下划线被认为是单词字符,因此 foo_bar 是一个词而不是两个词。但是连字符不是一个单词字符,所以 foo-bar 是两个字。

    所以你应该用催眠剂 - 无论您想在何处分隔两部分和下划线 _ 无论你想把两部分连接起来。在这种情况下 / 那是用来分开的,我更喜欢炒作 -

        2
  •  1
  •   bobince    15 年前
    • = AE

    你不必那么做。可以将URL中的非ASCII Unicode字符设置为UTF-8编码字节。所以:

    http://en.wikipedia.org/wiki/%C3%86
    

    在浏览器中显示为:

    http://en.wikipedia.org/wiki/Æ
    

    并且可以粘贴到地址栏中。

    空间和斜杠可以被编码为% 20和%2f。然而,这些窗体仍然以浏览器的百分比出现,因为它们是保留字符。所以他们看起来不太漂亮。在基于CGI的传统脚本环境不能读取它们的情况下,%2F还有一个额外的问题,默认情况下Apache故意阻止它们来阻止这些脚本变得混乱并留下安全漏洞。

    所以我把标题完全去掉:

    # % ' ( ) ? [ ] (U+00AD soft hyphen)
    

    以及任何控制字符(u+0000到u+001f,u+00a0除外,u+007f到u+00bf)。然后替换任何运行:

    " $ & * + , / : ; < = > @ \ ^ (U+0020 space) (U+000A newline)
    

    只有一个下划线。这就消除了在url中出现%xx序列的必要性。(对于Unicode字符,仍有%xx个序列,但用户看不到它们。)

    如果你喜欢的话,你可以用连字符代替下划线,哪个更漂亮。搜索引擎应该可以与任何一个。

    ETA对其他答案的重新评论:

    因为我使用php来搜索数据库中的名称。因此,每个字符都必须转换回原始字符,否则将找不到匹配的字符。

    在这种情况下,你不能做任何事情不可恢复的字符,虽然。你不能把一个变量转换成一个空间,空间必须被编码为ε%(20)和斜线,如:这将导致稍微难看的url,而–2f将给您带来apache和iis上的部署问题。

    如果只需要在标题上键入,则需要在处理的slug上添加一个(唯一索引的)列来查找,如上所述。但是请注意,您不能重命名/更正页面标题,因为它会改变SLUG,打破URL。

    解决这个问题的一个常见方法是在slug之外添加一个数字id(例如,请参见它是如何实现的)。你也可以重定向301蛞蝓名称是错误的最佳SEO。

        3
  •  0
  •   Stuart    15 年前

    我会使用一个破折号-谷歌分隔这样的文字搜索引擎优化的目的,甚至下划线-因为这些都是完美的可读性。