2014-11-17 52 views
0

CakePHP是否具有在腳本中逐字查找和替換的功能?CakePHP 1.3:在腳本中查找和替換字詞功能

我有數據庫包含「壞詞」和「替換詞」。

ID | Bad Words | Replace Words 
1 | ABC |  ABC1 
2 | EDF |  EDF1 
3 | GHI |  GHI1 

我有查看允許用戶輸入腳本到textarea。當我推送提交時,腳本中的所有不良詞將被替換爲替換數據庫中的詞。

如何找到腳本中的壞詞並將其替換爲數據庫內容。

感謝所有的觀點和建議。

編輯:2014年11月18日

這是我的控制器

class MAvoidanceWordsController extends AppController{ 

    //The function to check bad words in script 
    function word_check() 
    { 
     //If the submit button (name is "check") is pushed. 
     if(isset($_POST['check'])) 
     { 
      //Get all value in form 
      $script_content = $this->data; 
      //Query in database 
      $avoidance_list = $this->MAvoidanceWord->find('all'); 
      //Get Avoidance word 
      $this->set("word_data",$word_data); 
      foreach ($word_data as $word_item): 
       echo $word_item['MAvoidanceWord']['avoidance_word']; 
       echo "-----------"; 
       echo $word_item['MAvoidanceWord']['replace_word']; 
       echo "<br/>"; 
      endforeach; 
     } 
    } 

數據顯示會像在圖:

嬢-----------手 
看護婦-----------看護師 
スチュワーデス-----------フライトアテンダント 
百姓-----------農民 
ブラインドタッチ-----------タッチタイピング 
保母-----------保育士 
ヤンキー-----------アメリカ人 

word_check()是檢查腳本的函數。

echo $ word_item ['MAvoidanceWord'] ['avoidance_word'];將壞字內容列表

echo $ word_item ['MAvoidanceWord'] ['replace_word'];將是替換單詞內容的數組

我得到壞字數據的數組來檢查並替換已經過濾的單詞。我如何只想在我從表單提交的腳本中逐字檢查並替換它。

我試着用preg_replace($ badWords,$ replaceWords,$ userText);但它打破了UTF-8編碼。 「str_replace」是相同的。

編輯:2014年11月19日問題SOVLED

現在我發現解決問題的方法。這是最終的代碼。希望這會在這種情況下幫助更多的人。

function word_check() 
     { 
      //Read data from textarea on from 
      if(isset($_POST['check'])) 
      { 
       $script_content = $this->data['MAvoidanceWord']['textarea']; 
       $word_data = $this->MAvoidanceWord->find('all',array(
        'fields' => 'avoidance_word,replace_word', 
        'conditions' => array('invalid_flg' => '0') 
       )); 

       foreach ($word_data as $word_item): 
        $bad[] = $word_item['MAvoidanceWord']['avoidance_word']; 
        $good[] = $word_item['MAvoidanceWord']['replace_word']; 
       endforeach; 

       $result = str_replace($bad, $good, $script_content); 
       $this->set('view_result',$result); 
      } 
} 
+0

你可以給你預期的輸出? – Sadikhasan

+0

好吧,就像:我們將內容作爲腳本輸入到textarea中。按下Sumbit按鈕後,系統會檢查數據庫中的「壞詞」列表,並在腳本中替換(如果存在「壞詞」)並再次顯示在視圖中。 – TommyDo

回答

1

這可能不是一個好的解決方案,但您可以顯示所有文本,並使用str_replace()將所有「壞」字改爲「好」字。用你的壞詞一段時間循環。

$sql = 'SELECT * FROM `table`'; 

while($result of sql){ 
    str_replace($result['badword'],$result['goodword'],$texttosearch); 
} 

希望這有助於:)

+0

我會盡量讓它遵循你的建議。 – TommyDo

+0

我已經成功地使這個fucntion遵循你的建議。非常感謝。我將更新解決方案給所有人研究 – TommyDo

+0

@TommyDo謝謝,很高興它有幫助。你可以標記我的答案是正確的,請:) – Refilon

0

用於替換詞語存在String效用函數,但檢查必須手動完成。

+0

對不起,我正在使用Cake 1.3 – TommyDo

1

一般過程:

  1. 拉所有的壞詞和替代詞
  2. 分別將它們放入數組排序,(可能使用它們的ID)
  3. 使用替換「壞詞」preg_replace

代碼示例:

$userText = $_POST['userinput']; 
$badWords = array(1=>'ABC', 2=>'EDF',3=>'GHI'); 
$replaceWords = array(1=>'ABC1', 2=>'EDF2',3=>'GHI2'); 
$filteredText = preg_replace($badWords , $replaceWords , $userText); 
+1

我明白你的建議,但我太愚蠢,以成像的方式。你想花時間引導我一些東西,我也是CakePHP的新手。 – TommyDo

+3

這與CakePHP無關。這是純粹的PHP代碼。 – gmponos

+0

@TommyDo我不知道任何CakePHP,但是如果您發佈當前代碼(您要過濾這些詞的地方),我可能會插入代碼。 – Noy