如何在php中格式化用户输入的标签?

时间:2011-06-09 14:53:19

标签: php tags keyword str-replace

我一直在寻找,但我还没有找到答案。我正在尝试格式化我的标签,以便它们根据用户输入的方式显示为一个单词或多个单词。

例如,当用户输入:社交,书签,社交媒体

我得到这三个单独的标签......“社交”“书签”“媒体”

我需要它来显示这三个标签....“社交”“书签”“社交媒体”

注意社交媒体是一个词。引用只是为了帮助解释,它们实际上并没有显示出来。此外,一些用户使用空格而不是逗号分隔标签,尽管我的指示和它正在制作一个长标签。

这是我现在使用的整个代码......

        $query="SELECT gtags FROM posts WHERE category='".mysql_real_escape_string($CATID)."' order by rand() limit 20";
    $results=$conn->execute($query);
    $gtags = $results->getrows();
    for($i=0; $i<count($gtags);$i++)
    {
        $tags .= $gtags[$i][0].",";
    }
    $tags = str_replace("  ", ",", $tags);
    $tags = str_replace(".", ",", $tags);
    $tags = str_replace("/", ",", $tags);
    $tags = str_replace("+", ",", $tags);
    $tags = str_replace("", " ", $tags);
    $tags = str_replace(" ", ",", $tags);
    $tags = explode(",", implode(",", array_unique(explode(",", $tags))));
    STemplate::assign('tags',$tags);
    $templateselect = "tags.tpl";

3 个答案:

答案 0 :(得分:0)

您可以使用explode将逗号分隔列表转换为数组。你也可以在空间上爆炸,但爆炸不够聪明,不知道social media中的空间不是分隔符,而社交书签中的空间是。

我认为你最好训练你的用户使用逗号。您还可以提供多行编辑(textarea)来输入关键字并让它们在每行输入一个,也可以选择允许使用逗号。但是,如果您允许空格作为分隔符,则除非先查询所有标记并检查该列表,否则您将无法在标记中包含空格。但是如果您的用户实际上想要输入关键字“社交”和“媒体”呢? ...

答案 1 :(得分:0)

如果您的用户输入以逗号分隔的标记,则可以通过展开字符串来创建标记数组:$all_tags = explode(',', $tag_string);

如果您的用户没有输入逗号,那么您就会陷入困境,因为您不知道用户是否希望标签是一个字或更多(换句话说,您不能使用空格字符爆炸作为一个分隔符。)

您可以设置对标签表的AJAX调用,该标签表会在用户输入时返回标签。当他们单击列表中的正确标记时,将其添加到其标记列表中。这将消除这个问题,但是当用户想要添加标签或者已经不在表中的多个标签时,您将不得不弄清楚要做什么。

答案 2 :(得分:0)

更好的方法:

$search = array(
    "a",
    "b",
    "c"
);
$replace = array(
    "1",
    "2",
    "3"
);
$str = str_replace($search, $replace, $str);

我只允许用户从列表中选择标签有以下几个原因:

  • 大多数用户不知道如何正确标记,他们甚至可能创建标签,如(包括帽子)“BEST SOCIAL MEDIA SITE 2011”
  • 你可能有很多语法错误
  • 没有真正的“模式”
  • 以及你能想到的更多; P

imo更好的方法是创建自己的标记数据库,然后允许用户从输入中选择多个标记:text + autocomplete(jquery),或更简单的选择或复选框

只是想加我的意见