我有一个带有文本的数据库,每个文本中都有以#开头的单词(标签)(记录示例:“我好,我正在#Stackoverflow上发布#issue”)
我正在尝试找到一种解决方案来添加HTML代码,以便在打印文本时将每个标记转换为链接。
所以文本在MySQL数据库中存储为字符串,如下所示:
一些文字#tag1 text#tag2 ...
我想用
替换所有这些#abcd<a href="targetpage.php?val=abcd">#abcd</a>
最终结果如下:
Some text <a href="targetpage.php?val=tag1">#tag1</a> text <a href="targetpage.php?val=tag2">#tag2</a> ...
我想我应该使用一些正则表达式,但它根本不是我强大的一面。
答案 0 :(得分:1)
使用preg_replace(..)
$input = "Hi I'm posting an #issue on #Stackoverflow";
echo preg_replace("/#([a-zA-Z0-9]+)/", "<a href='targetpage.php?val=$1'>#$1</a>", $input);
答案 1 :(得分:1)
一个简单的解决方案可能如下所示:
$re = '/\S*#(\[[^\]]+\]|\S+)/m';
$str = 'Some text #tag1 text #tag2 ...';
$subst = '<a href="targetpage.php?val=$1">#$1</a>';
$result = preg_replace($re, $subst, $str);
echo "The result of the substitution is ".$result;
如果您实际上是在Twitter主题标签之后,并且想要发疯,请查看here如何在Java中完成。
还有JavaScript Twitter library使事情变得非常简单。
答案 2 :(得分:0)
尝试此功能
<?php
$demoString1 = "THIS is #test STRING WITH #abcd";
$demoString2 = "Hi I'm posting an #issue on #Stackoverflow";
function wrapWithAnchor($link,$string){
$pattern = "/#([a-zA-Z0-9]+)/";
$replace_with = '<a href="'.$link.'?val=$1">$1<a>';
return preg_replace( $pattern, $replace_with ,$string );
}
$link= 'http://www.targetpage.php';
echo wrapWithAnchor($link,$demoString1);
echo '<hr />';
echo wrapWithAnchor($link,$demoString2);
?>