我从URL查询字符串中提取标记搜索查询;例如,http://website.com/?tag=hellothere
会抢夺用“hellothere”标记的条目。为了避免各种问题并保持URL看起来干净,搜索包含的唯一标点符号是+(替换空格)和 - (作为其自身)。问题出现时,有标签包含撇号,问号或感叹号 - ' ? !
。
数据库中的标记列的格式如下:"tv, squirrels, paul's junk, clumps"
因此,如果有人使用网址http://website.com/?tag=pauls+junk
,我该如何构建一个查询,该查询将返回列yourtable
包含条目yourtags
的表"paul's junk"
中的行?
为了澄清,我想避免存储两个版本,因为在这种情况下它会相当多余。我们将使用的唯一非字母数字字符为'!?-
。只有mods会添加这些标签。除了那些之外,不会有任何标点符号或特殊字符的实例。
我想避免使用urlencode的特殊字符来保持搜索字符串看起来“漂亮”。用户不会在框中输入搜索内容,他们会点击标记链接。
答案 0 :(得分:2)
一个简单的解决方案是在数据库中存储“原始”和“已处理”标记,以便您将“原始”标记显示为网站输出的一部分(包含撇号等) ,但使用撇号免费“已处理”标签进行查找,因为这些标签与通过查询字符串提供的标签相同。
答案 1 :(得分:1)
另一个选项是规范化数据库中的标记。存储两个版本,原始版本,以及剥离了所有标点符号的版本。用户永远不会看到该版本,但这是您不可避免的排序领域。你也可以做些小事,删除额外的空格等等。
答案 2 :(得分:0)
如果您只是urlencode将查询字符串参数添加到链接中,那么所有编码都将为您完成
或者,如果您真正想要的是简化的URL但希望保留标签中的标点符号,则可以在数据库中存储每个标签的2个版本:标签本身,然后是URL标签,您可以格式化它像
答案 3 :(得分:0)
在比较之前替换不需要的字符,如:
SELECT * FROM yourtable WHERE REPLACE(REPLACE(REPLACE(REPLACE(products_name, '?' , '' ), '!' , '' ), '-' , '' ), '.' , '' ) = 'pauls junk'