有没有更好的方法,然后这个字符串中的字符替换?

时间:2010-09-02 07:54:08

标签: php string

我正在努力使我的网址变得漂亮。这是我提出的逻辑。

现在我想在网址上实现这样的目标。

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;

标题:

$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()这个?还是有更好的方法吗?

我是否在任何地方出错或者继续使用这种逻辑?

谢谢..

4 个答案:

答案 0 :(得分:2)

使用:

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

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

答案 1 :(得分:2)

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

你可以这样做:

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

这会将所有非字词char替换为-,用一个-替换多个连续的-,并删除前导-(如果有的话)。

答案 2 :(得分:1)

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

答案 3 :(得分:0)

你需要sanitize标题中的所有特殊字符,确保所有字符都被删除。