我有一个包含名为 歌曲 的表格的数据库,其字段为 标题 。
现在如果我的网址是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>
)/songs/name_of_the_son
- &gt;
/song.php?title=name_of_the_song
)select * from songs where songs.title=name_of_the_song
)好的,你看到数据库中没有看起来像name_of_the_song
但name_of the song
的条目。
如何管理整体,以便我的网址保持清晰,标题字段不限于一定数量的值(可以包含空格,下划线,破折号等等)?
答案 0 :(得分:5)
使用/1234/name-of-page/
之类的内容,其中1234
是行的主键ID,脚本会忽略name-of-page
。
这会直接提供表格中条目主键的链接,这将为您带来以下好处:
SELECT
次查询。您可能会注意到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吗?
具有计算机友好版本的标题(不使用空格,但使用下划线)和具有空格的用户友好列