0

我是新来的,需要你的帮助。我开始使用 .htaccess 和 php,但遇到了一个问题。在进行 url 重写时,我将一个字符串传递给 url,该字符串是从数据库中提取的文章的标题。问题是字符串(标题)有很多在 url 中拼写错误的字符。EG: localhost/news/php%5%is%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”变量,然后查询数据库以找到具有此标题的文章。所以我的问题是,我做错了吗?有没有其他方法可以做到这一点?我仅在 2 天前开始使用 htaccess,我想让我的网址更友好。我希望我的问题很清楚。感谢所有帮助我的人。

仅举个例子,这是我用来转换字符串中的普通图块的方法,该字符串不会随 url 中的符号(;amp、%、?等)改变

function generateUrl($url) {

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

    return $final;
}
4

1 回答 1

1

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

于 2012-08-10T14:48:52.833 回答