【问题标题】:How to format user entered tags in php?如何在php中格式化用户输入的标签?
【发布时间】:2011-06-09 14:53:18
【问题描述】:

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

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

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

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

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

这是我现在使用的全部代码...

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

【问题讨论】:

  • 您应该拆分您的 2 个问题,因为它们不相关(至少不相关)
  • 用户可能应该从列表中选择标签,否则您最终会得到大量带有拼写错误的类似标签等。允许他们添加新标签,当然,然后一次只能添加一个标签。使用 Ajax,我见过一些精巧的实现。

标签: php tags keyword str-replace


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 所以基本上除非用户做对了它是行不通的。我想 PHP 还不能读心。现在我强制每个标签分开($tags = str_replace(" ", ",", $tags);) 但我必须这样做,否则由空格分隔的标签会变成一个巨大的标签。是否有可能至少以某种方式解决这个问题?
    • 对不起,我不确定你在问什么……至少可以解决什么问题吗?
    【解决方案3】:

    更好的方法:

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

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

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

    更好的方法是创建自己的标签数据库,然后允许用户从输入中选择多个标签:文本 + 自动完成(jquery),或者更简单的东西,如选择或复选框

    只是想补充一下我的意见

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-23
      相关资源
      最近更新 更多