将主题标签转换为链接

时间:2014-08-22 12:50:15

标签: php string

现在我的第二个问题是,我的脚本无法识别第二个标签。 例如,

#heavy / machine gun #test

返回:

<a href="tag.php?id=heavy+">#heavy</a> / machine gun #test

我的代码是:

$words = preg_split("/(#[^\s+[:space:]]+ )/", $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);
foreach($words as $var => $value)
{
    if($value[0]=='#')
    {
     $test[$var]='<a href="tag.php?id='.urlencode(substr($value,1)).'"> '.$value.'</a>';

     $str=str_replace($value,$test[$var],$descrip);
    } 
}

第一个标签是链接,但不是第二个#...

提前致谢, 雷米。

3 个答案:

答案 0 :(得分:2)

<?php 
$text = "#heavy / machine gun #test";

$text = preg_replace('/#(\w+)/', '<a href="tag.php?id=$1">#$1</a>', $text);
// or
// $text = preg_replace('/#([^\s+[:space:]]+)/', '<a href="tag.php?id=$1">#$1</a>', $text);

echo $text;

html输出

<a href="tag.php?id=heavy">#heavy</a> / machine gun <a href="tag.php?id=test">#test</a>

视觉输出

#heavy /机枪#test

答案 1 :(得分:1)

你的正则表达式中有一个尾随空格,这就是为什么如果句子中的最后一个单词是一个标签,它就不会检测到它:它没有尾随空格。

如果我将正则表达式更改为

$str='omg the are using #heavy / machine gun #test';
$words = preg_split("/(#[^\s+[:space:]]+)/", $str, -1, PREG_SPLIT_DELIM_CAPTURE | PREG_SPLIT_NO_EMPTY);

我明白了:

var_dump($words)
array(4) { [0]=> string(18) "omg the are using " 
           [1]=> string(6) "#heavy" 
           [2]=> string(15) " / machine gun " 
           [3]=> string(5) "#test" 
         }

答案 2 :(得分:0)

好的,我找到了答案

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

谢谢你的帮助