用户友好的URL可靠的数据库

时间:2011-11-21 11:43:18

标签: php sql url user-experience

我有一个包含名为 歌曲 的表格的数据库,其字段为 标题 。 现在如果我的网址是http://www.foo.com/songs/xxx(xxx =歌曲的标题), apache正默默地重定向到类似于/song.php?title=xxx的页面。

为了修饰URL我将空格转换为下划线(因为我知道某些浏览器显示%20而不是空格,而不是%20实际上%20user%20友好%20ya%20知道20%%20i%20mean)。

如果标题包含空格和下划线(例如DJ_underscore fx)并且脚本将其转换为DJ_underscore_fx sql,则会出现阻碍:

    select * from songs where songs.title=xxx

无法找到它。

  

这里的草图更具体:

  • 脚本获取数据库中的不同标题
  • 将所有空格转换为下划线(例如name_of the song - > name_of_the_song
  • 将它们作为链接回应(例如<a href="/songs/name_of_the_song">name_of_the_song</a>
  • 用户点击链接并请求文档
  • apache正默默地重定向(例如/songs/name_of_the_son - &gt; /song.php?title=name_of_the_song
  • song.php 获取特定数据(例如select * from songs where songs.title=name_of_the_song

好的,你看到数据库中没有看起来像name_of_the_songname_of the song的条目。

如何管理整体,以便我的网址保持清晰,标题字段不限于一定数量的值(可以包含空格,下划线,破折号等等)?

4 个答案:

答案 0 :(得分:5)

使用/1234/name-of-page/之类的内容,其中1234是行的主键ID,脚本会忽略name-of-page

这会直接提供表格中条目主键的链接,这将为您带来以下好处:

  1. 无需重复的ID字段。
  2. 快速索引SELECT次查询。
  3. 您仍然可以获得“漂亮”网址的可读性和搜索引擎优化优势。
  4. 您可能会注意到StackOverflow本身就是这样:

    /questions/8211267/user-friendly-urls-reliable-with-the-database/

    可能会重写为:

    question.php?id=8211267

答案 1 :(得分:3)

只需添加另一个字段即可保留URL中使用的确切名称。当你有一些“重复”时 - 只需用_2,_3等附加它们,或者为用户提供一种编辑方式并手动给出另一个名称。

答案 2 :(得分:1)

您尝试实现的目标绝对是错误的,您可能需要在数据库中查找数百种变体,并且对SEO也不利。

首先设置一个规则,让所有网址都有_来分隔空间,这就是大多数网站网址的完成方式(以digg.com为例)。

然后创建一个单独的字段来存储URL,例如

title     | url
song name | song_name

然后根据URL字段进行查找。

由于遗留原因,在执行数据库查询之前,当您从GET收到标题时,也可以在查找脚本中用_替换任何空格。

答案 3 :(得分:0)

好吧,如果您想在网址中添加空格,那么人们会将其编辑为uri进行传输。如果不是用空格替换所有_,只需使用uridecoder(不记得确切的标题)。它仍然允许输入空格。在显示器上,链接中显示的文字,你不能在str_replace转换空格中的%20吗?

具有计算机友好版本的标题(不使用空格,但使用下划线)和具有空格的用户友好列