PHP:在特定字词周围添加一个html标记

时间:2018-06-01 05:56:38

标签: php html css regex preg-replace

我有一个带有文本的数据库,每个文本中都有以#开头的单词(标签)(记录示例:“我好,我正在#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> ...

我想我应该使用一些正则表达式,但它根本不是我强大的一面。

3 个答案:

答案 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);

http://php.net/manual/en/function.preg-replace.php

答案 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;

Demo

如果您实际上是在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);

 ?>

enter image description here

enter image description here