Как отформатировать введенные пользователем теги в php? - PullRequest
1 голос
/ 09 июня 2011

Я долго искал, но мне еще не удалось найти ответы.Я пытаюсь отформатировать свои теги, чтобы они выдавались либо одним словом, либо несколькими словами, в зависимости от того, как пользователь их вводил.

Например, когда пользователь вводит: социальные сети, закладки, социальные сети

Я получаю эти три отдельных тега ... "social" "закладки" "media"

Мне нужно, чтобы эти три тега отображались .... "social" "закладки" "social media"

Обратите внимание, что социальные сети - это одно слово.цитаты просто помогают объяснить, на самом деле они не отображаются.Кроме того, некоторые пользователи используют пробелы вместо запятых для разделения тегов, несмотря на мои инструкции, и вместо этого создается один длинный тег.

Вот весь код, который я сейчас использую ...

        $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 голосов
/ 09 июня 2011

Если ваши пользователи вводят свои теги через запятую, вы можете создать массив тегов, взорвав строку: $all_tags = explode(',', $tag_string);

Если ваши пользователи не вводят запятые, вы застряли, потому что выне поймет, намерен ли пользователь сделать тэг одним словом или более (другими словами, вы не можете взорваться с пробелом в качестве разделителя).

Вы можете настроить вызов AJAX дляВаша таблица тегов, которая возвращает теги в качестве пользовательских типов.Когда они нажимают на правильный тег в списке, добавьте его в свой список тегов.Это устранит проблему, но вам придется решить, что делать, когда пользователь хочет добавить тег или несколько тегов, которых уже нет в таблице.

0 голосов
/ 14 июня 2011

лучший подход:

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

я бы позволял пользователям выбирать теги из списка только по нескольким причинам:

  • большинство пользователей не знают, как правильно помечать теги,они могут даже создавать теги, такие как (с заглавными буквами) "BEST SOCIAL MEDIA SITE 2011"
  • , вы можете иметь много грамматических ошибок
  • нет реального "шаблона"
  • и более тогоВы можете подумать: P

Imo лучший способ сделать это - создать свою собственную базу данных тегов и затем позволить пользователю выбирать несколько тегов из ввода: текст + автозаполнение (jquery) или что-то ещеболее простой, как выбор или флажок

просто хотел добавить свое мнение

0 голосов
/ 09 июня 2011

Вы можете использовать explode для преобразования списка через запятую в массив.Вы также можете взорваться в пробелах, но взорваться недостаточно умно, чтобы знать, что пробел в social media не является разделителем, в то время как пробел в социальных закладках есть.

Я думаю, вам лучше всего научить своих пользователей использовать запятые.Вы также можете предоставить многострочное редактирование (textarea) для ввода ключевых слов и сделать так, чтобы они вводили по одному в каждой строке, опционально также разрешая запятые.Но если вы разрешите пробелы в качестве разделителей, вы не сможете иметь пробелы внутри тега, если сначала не выполните запрос всех тегов и не сверяетесь с этим списком.Но что, если ваш пользователь действительно хотел ввести ключевые слова "социальные сети" и "медиа"?...

...