我有一个标签系统:(注意:$ body是一个变量,它是用户提交的帖子。标签在帖子中。)我尝试使用regex进行此操作,但发现此方法同样有效并且容易一些。

<?php
$string = $body;
$htag = "#";
$arr = explode(" ", $string);
$arrc = count($arr);
$i = 0;

    while($i < $arrc) {
        if(substr($arr[$i], 0, 1) === $htag) {
            $arr[$i] = "<a href = 'category.php?#=$arr[$i]'>".$arr[$i]."</a>";
        }
            $i++;
    }

$string = implode(" ", $arr);


?>

然后,在页面后面回显$string

我的问题是使用php数组元素将主题标签链接到类别页面的方法。在此页面上,我想称呼带有“标签”的单词,并使用mysql查询来获取具有标签的帖子。但是,当我呼唤$arr[$i]时,出现一个错误:


  未定义的偏移量:在我将此数组元素称为的行上为1
  变成另一个变量


有什么方法可以更好,更有效地完成这项任务?

最佳答案

好的,因此可以使用某些正则表达式和PHP的preg_replace函数大大简化此操作。 @Doge在正确的轨道上,但是在我的测试中,\b并没有给出我认为您想要的结果。

基本上,您可以用几乎所有的东西替换

$newText = preg_replace("/#(\w+)/", "<a href='category.php?tag=$1'>#$1</a>", $text);


如…

$text = "This is a #hashtag within some #awesometext.";

$newText = preg_replace("/#(\w+)/", "<a href='category.php?tag=$1'>#$1</a>", $text);

echo $newText;


结果将是…

This is a <a href='category.php?tag=hashtag'>#hashtag</a> within some <a href='category.php?tag=awesometext'>#awesometext</a>.


See it in action here

10-06 11:50