现在我的第二个问题是,我的脚本无法识别第二个标签。 例如,
#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);
}
}
第一个标签是链接,但不是第二个#...
提前致谢, 雷米。
答案 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>
视觉输出
答案 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);
谢谢你的帮助