2011-06-09 47 views
1

我一直在寻找一段时间,但我还没有找到我的答案。我试图格式化我的标签,以便根据用户输入的内容将其作为一个单词或多个单词出现。如何在php中格式化用户输入的标签?

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

我要把这三个单独的标签......“社会”,“书签”,“媒体”

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

注意社交媒体是一个词。这些报价只是为了帮助解释,他们实际上并没有出现。另外一些用户使用空格而不是逗号来分隔标签,而不是使用我的指令,而是使用一个长标签。

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

 $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"; 
+0

你应该分裂您2个问题,因为他们是不相关的(并不多至少) – 2011-06-09 14:57:21

+0

什么是你的问题? – 2011-06-09 15:03:24

+0

用户应该从列表中选择标签,否则最终会出现大量类似错别字的标签等等。允许他们添加新标签,一次只能添加一个标签。使用Ajax,我已经看到了一些精巧的实现。 – Cups 2011-06-09 15:07:10

回答

0

您可以使用爆炸改造逗号分隔列表的数组。你也可以在空间上爆炸,但是爆炸并不足以知道social media中的空间不是分隔符,而社交书签中的空间是。

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

0

如果用户输入由逗号分隔的标签,您可以通过爆炸字符串创建的标签数组:$all_tags = explode(',', $tag_string);

如果用户不输入逗号,你被卡住,因为你是如果用户希望标签是一个或多个单词(换句话说,您不能将空格字符作为分隔符进行爆炸),那么您就不知道该用户是否想要使用该标签。

你可以设置一个AJAX调用你的标签表,该标签表返回用户键入的标签。当他们点击列表中正确的标签时,将其添加到标签列表中。这样可以消除这个问题,但是当用户想要添加一个或多个不在表格中的标签时,您必须制定该怎么做。

+0

所以基本上除非用户这样做是正确的,它不会工作。我想PHP不能阅读头脑......但是。现在我强迫每个标签分开($ tags = str_replace(“”,“,”,$ tags);)但我必须这样做,否则由空格分隔的标签将成为一个巨大的标签。至少可以解决这个问题吗? – viacin 2011-06-09 15:15:54

+0

对不起,我不确定你在问什么......至少可以解决什么问题? – 2011-06-09 15:18:27

0

一个更好的办法:

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

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

  • 大多数用户不知道如何正确地标记,他们甚至创造标签(包括帽子)“BEST社交媒体网站2011”
  • 你可以有很多语法错误
  • 没有真正的“模式”
  • 多,你能想到的,P

IMO更好的方式来做到这一点是创建自己的标签数据库,然后让用户选择从输入多个标签:文字+自动完成(jQuery的),或一些更简单的像一个选择或复选框

只是想补充我看来