2009-11-21 114 views
0

有一種評論形式,我希望人們也可以用外語書寫。 但是,例如,我的垃圾郵件過濾機制會阻止「été」這個詞,因爲它沒有元音(英文元音)。PHP - 檢測非英文字母和過濾輸入

我的問題是,使用正則表達式時檢測像元音:

$pattern = '/[aeiou]/'; 

我不能簡單地寫

$pattern = '/[aeiouéáíúó...]/'; 

和服務器將解釋那麼好。 我該如何解決這個問題?

對於非拉丁字母,如俄語和希伯來語,有沒有一種方法可以檢測內容屬於哪種語言並執行適當的垃圾郵件過濾機制?

整個垃圾郵件過濾的目的是阻止任何類似「gjkdkgahg」或「ttt」,這是一個公開可見的頁面。

回答

1
$pattern = '/[aeiouéáíúó]/'; 

使用umodifier得到支持Unicode的正則表達式,並應工作,假設你使用UTF-8字符串的工作在你的應用程序,你應該是真的。

對於非拉丁字母,如俄語和希伯來語,有沒有一種方法可以檢測內容屬於哪種語言並執行適當的垃圾郵件過濾機制?

基本俄羅斯被發現在Unicode範圍U + 0400-U + 04FF;元音是аэыуояеёюи。希伯來語在U + 0590-U + 05FF的範圍內,不以相同的方式使用元音。我不認爲檢測元音是非常有用的......只要你堅持使用明確的單詞邊界的語言,你可能會用更簡單的字典來涵蓋多種語言,以獲得更多的運氣。對中國人沒什麼用處。

我不認爲這種事情是一個很好的反垃圾郵件機制。這很可能是誤報,因爲它是發現垃圾郵件,這畢竟經常是適當的話。變動的擾流板領域(CSS隱藏的輸入必須保持空白,但不會被殭屍機器人使用)和一次性或限時提交令牌更有效。

+0

謝謝你會非常喜歡!我會使用你的建議 – Gal 2009-11-21 21:15:03

+0

這是一個有用的標準,我已經使用蜜罐和標記方法來捕獲垃圾郵件,能夠篩選出外語將是另一個有用的工具。 – alimack 2017-09-21 13:11:21

0

嗯,我個人沒有發現像你的垃圾郵件過濾器太有效。國際海事組織最好注意鏈接,強詞和性/有關的詞,垃圾郵件通常包含它們。您只能爲註冊用戶限制授予權限,並且您可以在他們出現之前將其作爲主持人刪除,如果他們來自不可信(=來自未註冊用戶)源。

+0

也許我不清楚。這只是我的垃圾郵件檢測機制的一部分。我很感謝你的評論,但它並沒有幫助一點(; – Gal 2009-11-21 19:42:56

+0

@Gal:儘管你的意圖,我不覺得這種方式清楚,以基於元音計數過濾味精 - 你有沒有注意到單詞味精? – erenon 2009-11-21 19:47:19

1

您可以使用normalizer找到與重音字符的字符串:

<? 
    if (! normalizer_is_normalized($input)) { 
     // handle non-normalized input 
    } 
?> 

如果需要的話,你也可以使用這個類規範化字符串搜索元音:

<? 
    $norm = normalizer_normalize($input); 
    if (! preg_match('/[aeiou]/', $norm)) { 
     // handle no-vowels in input 
    } 
?> 

你也想了解默認的標準化表格,並確保它滿足您的要求。