首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >URL路由:创建友好URL时处理空间和非法字符

URL路由:创建友好URL时处理空间和非法字符
EN

Stack Overflow用户
提问于 2008-11-05 21:16:33
回答 11查看 8.1K关注 0票数 8

我见过很多关于URL路由的讨论,还有很多很棒的建议.但在现实世界中,有一件事我还没有讨论过:

  1. 使用空格和非法字符创建友好的
  2. 查询数据库

假设您正在构建一个医疗站点,其中有一个带有Subcategory.分类和可选的文章的(1对多)。(可以使用任何例子,但是医学领域有很多长单词)

示例类别/子/文章结构:

  1. 您的一般健康(类别)
    • 自然卫生(Subcategory)
      1. 你身体的免疫系统以及它为什么需要帮助。(条款)
      2. 植物和草药真的是解决问题的方法吗?
      3. 我应该吃强化食品吗?

代码语言:javascript
复制
- Homeopathic Medicine  
    1. What's homeopathic medicine?

代码语言:javascript
复制
- _Healthy Eating_ 
    1. Should you drink 10 cups of coffee per day?
    2. Are Organic Vegetables worth it?
    3. Is Burger King® evil?
    4. Is "French café" or American coffee healthier?

  1. 病与疾病(类别)
    • 自身免疫性疾病(Subcategory)
      1. 人类的头号杀手是某种疾病。
      2. 如何寻求帮助

代码语言:javascript
复制
- _Genetic Conditions_ 
    1. Preventing Spina Bifida before pregnancy.
    2. Are you predisposed to live a long time?

  1. FooBar博士的个人建议(类别)
    1. 关于中药与天然药物的思考--(文章--无子类)
    2. 你为什么要关心自己的健康?
    3. 正确的饮食和良好的饮食是可能的。
    4. 不流血手术已经成熟了吗?

在这样的结构中,如果你选择:/{}/{ some }/{Category},那么就会有一些

此外,还有许多非法字符,比如#!?‘é“等等。

所以,问题(S)是:

  1. 你将如何处理非法字符和空格?(专业人士和康斯?)
  2. 你能从数据库中处理这个问题吗?
    • 换句话说,会信任DB查找项,传递标题,或拉出所有标题,并在代码中找到键以获得传递给数据库的密钥(两个对数据库的调用)?

注意:我总是看到漂亮的例子,如/products/饮料/短产品名称/如何处理一些丑陋的例子^_^?

EN

回答 11

Stack Overflow用户

回答已采纳

发布于 2008-11-05 22:02:43

为了可读性的原因,我自己更喜欢(你在上面加上一个下划线和_'s的虚拟go_away ),如果你要剥夺空间的话。

您可能需要尝试铸造扩展字符,例如,在可能的情况下关闭-ascii等价物,即:

ü-> u

然而,根据我的经验,实际SEO相关问题的最大问题不是URL包含所有可爱的文本,而是当人们更改链接中的文本时,所有SEO工作都变成了垃圾,因为现在索引中有了DEADLINKS。

为此,我建议堆栈溢出做什么,并有一个数字部分,它引用一个常量实体,而完全忽略文本的其余部分(并且/或在其错误时更新它)。

此外,极端的遗传性质只会使人类的可用性变差。人类讨厌长urls。复制粘贴它们糟透了,它们更容易被打破。如果你能把它细分为较低的台阶

代码语言:javascript
复制
/article/1/Some_Article_Title_Here
/article/1/Section/5/Section_Title_Here
/section/19023/Section_Title_here  ( == above link ) 

这样,你唯一需要做巫毒魔法的时间是,编号的文章实际上已经被删除了,这时你使用文本部分作为搜索字符串,试图找到真正的文章或类似的东西。

票数 4
EN

Stack Overflow用户

发布于 2008-11-05 21:34:58

我的最后一个方法是:

  1. 将所有“奇怪字母”转换为“普通字母”( ->à)为a、etc n等。
  2. 将所有非字字符转换为_(即不是a-zA-Z0-9)
  3. 用单个下划线替换下划线组
  4. 删除所有尾迹和前导下划线。

至于存储,我认为友好的URL应该转到数据库,并且是不可变的,毕竟是酷的城市不会变

票数 4
EN

Stack Overflow用户

发布于 2008-11-05 21:45:20

解决方案2是那些.有些改进是可能的,例如。为了可读性,把撇号变成虚无而不是破折号。通常,您会想要在数据库中存储标题的已处理的URL有效性版本,以及“真实的”标题,这样您就可以使用索引的选择位置来选择条目。

然而。URL路径部分中没有实际的非法字符,只要您对其进行适当的编码。例如,空格、散列或斜杠可以编码为%20、%23或%2F。通过这种方式,可以将任何字符串编码到URL部件中,这样您就可以通过实际的、不变的标题从数据库中选择它。

但是,这也有一些潜在的问题,这取决于您的web框架。例如,基于CGI的任何内容都无法区分编码的%2F和实际的/之间的区别,而且某些框架/部署可能难以处理Unicode字符。

或者,一个简单而安全的解决方案是在URL中包含主键,使用标题部分纯粹是为了使地址更好。例如:

代码语言:javascript
复制
http://www.example.com/x/category-name/subcat-name/article-name/348254863

这就是为什么。亚马逊就是这么做的。它的优点是您可以更改数据库中的标题,并使带有旧标题的URL自动重定向到新的标题。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/266719

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档