2011-11-21 60 views
1

用户友好的URL我有一个包含一个名为歌曲与现场标题表的数据库。 现在如果我的网址是http://www.foo.com/songs/xxx(xxx =歌曲的标题), apache正悄悄地重定向到一个类似于:/song.php?title=xxx的页面。 (因为我知道一些浏览器显示%20而不是空格,而不是%20really%20user%20friendly%20ya%20know%20what%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>
  • 用户单击链接并将r请求文档
  • apache默默重定向(例如, /songs/name_of_the_son - > /song.php?title=name_of_the_song
  • song.php取得具体的数据(例如select * from songs where songs.title=name_of_the_song

OK你看,有一个在看起来像name_of_the_songname_of the song数据库中没有条目。

如何管理整个让我的网址仍然清晰,标题领域不限于一定量的值(可以有空格,下划线,破折号,以及什么)?

回答

3

只需添加另一个字段,它将保留URL中使用的确切名称。而当你有一些“重复” - 只需追加他们的_2,_3等,或给用户编辑和另一个名字手动的方式。

+2

或者做类似'/ 1234/name-of-whatever /'其中'1234'是对象的ID,'name-of-whatever'被脚本忽略。 – Polynomial

+1

@Polynomial:它甚至好多了。你应该把它作为一个单独的答案 – zerkms

+0

@zerkms我想到了这个解决方案,但当我花了很多分钟来解决我的请求,我现在想不到现在,我只是希望那里会有其他解决方案,谢谢无论如何,我只是等待更多的答案,但得到检查答案 – user544262772

0

好吧,如果你想在url中使用空格,人们会将它用于过境编码。如果不是用空格替换所有_,只需使用uridecoder(不记得确切的标题)。它仍然允许键入空格。在显示器上,链接中显示的文字,你不能做一个str_replace转换空格%20?

要么就是有标题的电脑友好的版本(不使用空格,但是下划线)和一个用户友好的列确有空格

1

是definetly你的努力实现了错误的方式,你可能会有数百个变体在你的数据库中查找,也对SEO不利。

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

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

title  | url 
song name | song_name 

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

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

5

使用类似/1234/name-of-page/的地方,其中1234是该行的主键ID,name-of-page被脚本忽略。

这给直接链接到表中的条目的主键,它会给你几个好处:

  1. 没有必要有重复的ID字段。
  2. 快速索引SELECT查询。
  3. 您仍然可以获得“漂亮”网址的可读性和SEO优势。

您可能注意到,StackOverflow的本身正是这样做的:

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

这可能被重新编写,是这样的:

question.php?id=8211267

+1

+1。 [这是要走的路](http://stackoverflow.com/questions/2647789/problem-in-displaying-a-url-slug-with-dash/2647828#2647828)。 – Shef

+0

你的帮助是珍贵的朋友,非常感谢... – user544262772