在字符串中替换字符是否有更好的方法?

3

我正在修改我的网址,让它更加美观。以下是我想到的逻辑。

现在我想要实现这样的网址。

http://domain.com/category/date/post-title

为此,我首先从数据库中获取了日期和文章标题的值,如下所示:

日期:

$date = date("d", $row['timestamp']);
$month = date("m", $row['timestamp']);
$year = date("Y", $row['timestamp']);
$date_url = $date.$month.$year;

for title:

$title = $row['title'];
$title_url = str_replace(" ", "-", $title);

现在我创建了一个超链接,将其发送到像这样的URL。
<a href="news.php?id=<?php echo $id; ?>&cat=<?php echo 'news'; ?>&date=<?php echo $date_url; ?>&title=<?php echo $title_url; ?>"><img src="<?php echo 'admin-login/'.$pic_title; ?>"/></a>

我的主要问题在于标题,我正在从数据库中填充值,使用 str_replace() 来处理这个问题是否可以?还是有更好的方法吗?

我是否有哪里做错了,或者继续使用这个逻辑是可以的?

谢谢。


顺便说一句,我建议在其自己的PHP块中编译您的URL,并只输出URL变量,而不是像现在这样编译。这样更易读和易于维护。 - Rob Olmos
4个回答

2

您没有考虑标点符号和其他特殊字符。

您可以这样做:

$from = array('/\W/','/-+/','/^-/','/-$/');
$to = array('-','-','','');
$title = preg_replace($from,$to,$title);

这将用-替换任何非单词字符,将多个连续的-替换为一个-,并且如果有的话,还会删除前导和尾随的-

2

使用:

$date = date("dmy", $row ['timestamp'])
对于标题,使用preg_replace删除所有非法字符

$title = strtolower(preg_replace(array('/[^a-zA-Z0-9 -]/', '/[ -]+/', '/^-|-$/'), array('', '-', ''), $title));

1
$title = preg_replace('/\W/', '-', $row['title']);

0

在标题中,您需要清除所有特殊字符,确保全部被消除。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接