如何格式化数据库查询的URL

时间:2012-08-10 14:30:25

标签: php mysql .htaccess url url-rewriting

我是新来的,我需要你的帮助。 我开始玩.htaccess和php,我遇到了一个问题。 在进行url重写时,我将一个字符串传递给url,该字符串是从数据库中提取的文章的标题。问题是字符串(标题)有很多字符在url中拼写错误。 EG:localhost / news / php%5%是%out 这里%是空格。我尝试使用preg_replace格式化每个标题,并用' - '替换每个空格但是有很多字符,我想知道是否有任何方法可以在没有preg_replace的情况下执行此操作,因此任何字符串都可以用于查询。 在news.php中,我从url获取字符串,并将其用于数据库中的查询,从中我提取整篇文章的正文。

RewriteRule ^news/([a-zA-Z0-9._]+)/?$ /news.php?news_title=$1

这是我的.htaccess文件所以在news.php中我通过$ _GET获取'news_title'变量,然后查询数据库以查找具有此标题的articol。 所以我的问题是,我做错了吗?有没有其他方法这样做?我2天前才开始使用htaccess,我想让我的网址更加友好。 我希望我的问题很明确。 感谢所有帮助我的人。

仅举例来说,这就是我用来转换字符串中普通图块的方法,该字符串不会随着网址中的符号(; amp,%,?等)而改变

function generateUrl($url) {

    $v1 = preg_replace("/[\s\:\;\,\_\'\`\"\?\!\%\(\)\+\=\#\@\[\]\{\}\/]/", "-", $url );
    $v2= preg_replace('/[-]{2,}/', '-', $v1);
    $v3 = preg_replace('/^[-]/', '', $v2);
    $final = preg_replace('/[-]$/', '', $v3);

    return $final;
}

1 个答案:

答案 0 :(得分:1)

我认为问题的答案在URL Friendly Username in PHP?。当您向表中添加文章时,使用此函数(Slug)将文章标题和商店转换的标题转换为“slug”列。当用户输入地址(.....)/ article.php?name = some-title时,使用$ slug = $ _GET ['title']并通过slug查找文章。在保存文章之前,您应该检查带有此slug的文章是否存在。如果存在添加slug某个数字然后保存到db。您不能允许在表中存在两个具有相同slug的记录。