【发布时间】:2009-09-10 10:55:31
【问题描述】:
快速一个。
我正在使用 mod rewrite 并且有大多数替换:
-
空白空间 =
_ -
æ=ae -
Æ=ae
等等。
/ 的自然替换字符是什么?
谢谢
【问题讨论】:
标签: url url-rewriting
快速一个。
我正在使用 mod rewrite 并且有大多数替换:
_
æ = ae
Æ = ae
等等。
/ 的自然替换字符是什么?
谢谢
【问题讨论】:
标签: url url-rewriting
下划线被认为是一个单词字符,所以foo_bar是一个单词而不是两个单词。但是连字符不被认为是一个单词字符,所以foo-bar是两个单词。
因此,您应该在要分隔两个部分的地方使用连字符 -,在要连接两个部分的地方使用下划线 _。对于用于分隔的/,我更喜欢连字符-。
【讨论】:
Big_ball_-_supersports?为什么不加入Big-ball-supersports?
- Æ = ae
您不一定需要这样做。您可以将非 ASCII Unicode 字符作为 UTF-8 编码字节放在 URL 中。所以:
http://en.wikipedia.org/wiki/%C3%86
在浏览器中显示为:
http://en.wikipedia.org/wiki/Æ
两者都可以粘贴到地址栏中。
空格和斜杠可以编码为 %20 和 %2F。但是,这些表单在浏览器中仍然显示为百分比,因为它们是保留字符。所以它们看起来并不那么漂亮。 %2F 的另一个问题是基于 CGI 的传统脚本环境无法读取它们,而 Apache 默认情况下会故意阻止它们以阻止此类脚本混淆并留下安全漏洞。
所以我通过完全删除来制作标题段:
# % ' ( ) ? [ ] (U+00AD soft hyphen)
以及任何控制字符(U+0000 到 U+001F,U+00A0 和 U+007F 到 U+00BF)。然后替换任何运行:
" $ & * + , / : ; < = > @ \ ^ (U+0020 space) (U+000A newline)
带有一个下划线。这消除了 %xx 序列出现在 URL 中的必要性。 (对于 Unicode 字符,仍然会有 %xx 序列,但用户不会看到它们。)
如果您愿意,可以使用连字符代替下划线,以更漂亮的为准。搜索引擎应该都可以。
eta 重新评论其他答案:
因为我使用 php 在我的数据库中搜索名称。所以每个字符都必须转换回原始字符,否则将找不到匹配项。
但是,在这种情况下,您无法对角色做任何无法恢复的事情。您不能将“Æ”更改为“ae”,空格必须编码为“%20”,斜杠必须编码为“%2F”。这将导致 URL 稍微难看,并且“%2F”会给您在 Apache 和 IIS 上的部署问题。
如果您只需要键入标题,则需要在已处理的 slug 上添加一个(唯一索引)列以进行查找,如上所述。但是请注意,您不能重命名/更正页面标题,因为它会更改 slug,破坏 URL。
解决此问题的常用方法是在 slug 之外包含一个数字 ID(例如,请参阅 SO 是如何做到的)。您还可以在 slug 名称错误的地方进行 301 重定向以获得最佳 SEO。
【讨论】:
我会使用破折号 - 因为 Google 会出于 SEO 的目的将这样的单词分开,或者甚至使用下划线 _ 来分隔,因为它们都具有可读性。
【讨论】: