我一直在寻找,但我还没有找到答案。我正在尝试格式化我的标签,以便它们根据用户输入的方式显示为一个单词或多个单词。
例如,当用户输入:社交,书签,社交媒体
我得到这三个单独的标签......“社交”“书签”“媒体”
我需要它来显示这三个标签....“社交”“书签”“社交媒体”
注意社交媒体是一个词。引用只是为了帮助解释,它们实际上并没有显示出来。此外,一些用户使用空格而不是逗号分隔标签,尽管我的指示和它正在制作一个长标签。
这是我现在使用的整个代码......
$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 :(得分: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);
我只允许用户从列表中选择标签有以下几个原因:
imo更好的方法是创建自己的标记数据库,然后允许用户从输入中选择多个标记:text + autocomplete(jquery),或更简单的选择或复选框
只是想加我的意见