2011-06-09 43 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的),或一些更簡單的像一個選擇或複選框

只是想補充我看來