Php 具有与mysql查询匹配的URL标题

Php 具有与mysql查询匹配的URL标题,php,sql,Php,Sql,我有包含以下信息的SQL行: 示例-Exampleish(Exampleishbosh) 不是所有的衣服都有(),所以脱掉衣服是个好主意吗 - and () 然后用SQL查询中的剩余单词进行搜索 http://www.co.com/example_exampleish_exampleishbosh/ 或者这是一个坏主意?如果我理解正确,您正在寻找类似slug的功能,如果是这样,下面是您应该用来“slagify”ASCII字符串的函数: function Slugify($string) {

我有包含以下信息的SQL行: 示例-Exampleish(Exampleishbosh)

不是所有的衣服都有(),所以脱掉衣服是个好主意吗

- and ()
然后用SQL查询中的剩余单词进行搜索

http://www.co.com/example_exampleish_exampleishbosh/

或者这是一个坏主意?

如果我理解正确,您正在寻找类似slug的功能,如果是这样,下面是您应该用来“slagify”ASCII字符串的函数:

function Slugify($string)
{
    return strtolower(trim(preg_replace('~-+~', '-', preg_replace('~[^0-9a-z]~i', '-', $string)), '-'));
}

Slugify('Example - Exampleish (Exampleishbosh)'); // example-exampleish-exampleishbosh
您应该将slug存储在数据库中,并将其与重新请求的URL相匹配

编辑:此功能可以进一步简化:

function Slugify($string)
{
    return strtolower(trim(preg_replace(array('~[^0-9a-z]~i', '~-+~'), '-', $string), '-'));
}

因为这个问题对我来说有点不清楚,所以我假设信息字符串作为附加信息(如文章标题)的关键类型,并且没有真正的GET搜索要求

如果是这种情况,如果允许修改数据库结构,我将使用某种类型的替代(如数字标识符),使用title thingy作为一个名称

在这种情况下,当您在网站中生成链接时,您将获得目标的id和slug,并以
http://example.com/[id]/[slug]/
,例如
http://example.com/213/omg-lol-the-cat-jumped/

在您的服务器中处理请求时,您只对id(“213”)感兴趣,而slug(“omg lol the cat jumped”)只是供人类用户偷看标题,并不影响搜索结果。您提供的页面与id匹配,而不是slug。通过这种方式,您的搜索是高效的(没有类似SQL的匹配),并且不太容易出错(来自格式错误的段塞的SQL注入)


至于(可能的?)如何将字符串转换为slug的问题,有很多方法。我只需删除所有非字母数字字符,并将字母数字块与破折号或下划线组合。您可能希望将字符串长度减少到20个字符。

可能的重复:@Gumbo:这更像是一个SQL问题,因此不是真正的重复。在这种情况下不会重复,因为mysql行信息永远不会重复twice@johnnnnnnny:不同类型的副本:)