【问题标题】:Creating slug with strtolower() and preg_replace() [duplicate]使用 strtolower() 和 preg_replace() 创建 slug [重复]
【发布时间】:2012-10-26 11:57:29
【问题描述】:

可能重复:
Regular Expression Sanitize (PHP)

我想让我的链接 SEO。在我开始之前,链接看起来像这样:

http://www.domain.tld/index.php?page=blog

我的目标是将其更改为:http://www.domain.tld/blog。现在可以了。

我把 htaccess 改成了这个:

RewriteEngine On

RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^\w+$ index.php?page=$0 [L]
RewriteCond %{THE_REQUEST} index\.php
RewriteCond %{QUERY_STRING} ^page=(\w+)$
RewriteRule ^index\.php$ /%1? [R=301,L]
RewriteRule ^blog/(\d+)-([\w-]+)$ index.php?page=single_news&id=$1&headline=$2

现在我想更改任何博客条目标题的 URI。他们看起来像这样:http://www.domain.tld/index.php?page=single_news&id=2&headline=This%20Is%20A%20Headline

我想让它们看起来像这样:http://www.domain.tld/blog/2-this-is-a-headline 我正在 div 类“news_headline”中生成我的标题链接(见下文)。

<div id="main">
<?php
$query = "SELECT `id`, `headline`, `writer`, `content`, DATE_FORMAT(date,\"%d. %M %Y\") AS `date` FROM `blog` ORDER BY `id` DESC";
$news_resource = mysql_query($query) or die(mysql_error());
?>

<?php
$all_news = array();
$five_news = array();
for($i = 0; $news = mysql_fetch_object($news_resource); $i++){
if($i < 5){
  $five_news[] = $news;
}
$all_news[] = $news;
}
?>

<?php foreach($five_news as $news)
{ ?>

<div class="news_bg">
<div class="news_headline"><a href="blog/<?php echo $news->id; ?>-<?php echo $news->headline; ?>"><?php echo $news->headline; ?></a></div>
<div class="news_infoline_top"><?php echo $news->date; ?> &middot; <?php echo $news->writer; ?></div>
<div class="news_text"><?php echo $news->content; ?></div>
</div>
<?php } ?>
</div>

使用我的 htaccess(见上文),链接现在是这样的:

http://www.domain.tld/blog/2-This Is A Headline

我已经得到了这方面的帮助,一个好人给了我这个 code-sn-ps 以使链接看起来像我想要的那样,但我不知道如何使用它们:

$urititle = strtolower(preg_replace('/[^\w-]+/','-', $title));

$_GET['headline'] != $urititle

我迷路了。

【问题讨论】:

标签: php regex clean-urls


【解决方案1】:

你已经很接近了:

  • 您将 ID 放在有趣部分的开头。这允许您通过唯一的 ID 查询您的数据库并且快速。
  • 您已经了解需要将标题的文本转换为它的 slug 变体,并且您已经知道这是字符串处理。

您还有一些步骤可以完成此操作。一些笔记:

  • 自己创建一个执行字符串转换的函数。这里的重要部分是,您可以简单地调用它。
  • 当对文章的请求进来时,根据从字符串中获取的ID值获取文章:$assigned = sscanf($slug, '%d-', $id);
  • 对于 SEO,执行与创建链接时相同的操作。然后比较当前链接是否仍然正确(标题可能已更改)。如果没有,请永久重定向到正确的链接。

就是这样!

【讨论】:

    猜你喜欢
    • 2011-01-25
    • 1970-01-01
    • 2019-01-18
    • 2013-01-28
    • 2012-04-16
    • 2015-06-22
    • 2011-09-10
    • 2018-06-03
    • 2018-03-22
    相关资源
    最近更新 更多