2011-03-06 113 views
1

我从URL查询字符串拉取标签搜索查询;例如,http://website.com/?tag=hellothere会抢夺标记为“hellothere”的条目。为了避免各种问题,并保持URL看起来干净,搜索包含的唯一标点符号是+(替换空格)和 - (本身)。问题来了,因为有标签包含撇号,问号或感叹号 - ' ? !忽略正在搜索的内容中的标点符号

在数据库中的标签栏的格式,像这样:"tv, squirrels, paul's junk, clumps"

所以,如果有人使用url http://website.com/?tag=pauls+junk,我怎么能构建一个查询,从表yourtable其列yourtags包含条目返回的行"paul's junk"

为了澄清,我想避免存储两个版本,因为在这种情况下它会相当多余。我们将使用的唯一非字母数字字符是'!?-。只有mods会添加这些标签。除此之外,不会有任何标点符号或特殊字符。

我想避免urlencode'ing特殊字符,以保持搜索字符串看起来“漂亮”。用户不会输入搜索框,他们会点击标签链接。

+0

为什么不'urlencode'搜索字符串? – Czechnology 2011-03-06 17:19:51

+1

@middaparka @Will @ cusimar9我在考虑存储两个版本,而且这仍然是最佳选择。我希望会有一些不需要相当多余的额外列,因为我们将要使用的唯一非字母数字字符是'!? - 。只有mods会添加这些标签。除了那四个之外,不会有任何标点符号或特殊字符。 – grilldos 2011-03-06 17:27:52

回答

0

如果你只是urlencode您的查询字符串参数,你将它们添加到您的链接,那么所有的编码会为你做

或者,如果你真的想简化网址,但之前要保留在标签的标点符号,您可以将每个标签的两个版本存储在数据库中:标签本身,然后是URL标签,您可以将其格式化,但您喜欢

2

一个简单的解决方案是存储“原始”和“已处理”标签在数据库中,以便您将“raw”标记显示为站点输出的一部分(用撇号等完成),但使用撇号自由“已处理”标记进行查找,如第ese将与通过查询字符串提供的相同。

1

另一种选择是标准化数据库中的标签。存储两个版本,即原始文本和标点符号全部删除。用户从来不会看到那个版本,但这是你不可避免要分类的领域。你也可以做一些事情,如让他们都较低的情况下,删除多余的空格等

0

之前比较喜欢更换不必要的字符:

SELECT * FROM yourtable WHERE REPLACE(REPLACE(REPLACE(REPLACE(products_name, '?' , ''), '!' , ''), '-' , ''), '.' , '') = 'pauls junk'