2011-07-01 11 views
1

私はphpとcodeigniterフレームワークを使用してWebアプリケーションを構築していますが、クライアントの要件の1つは検証から「swear word」フィルタを実装することです。誰もがPHPで書かれた任意の事前構築されたソリューションを知っていますか?あるいは、呪われた言葉の網羅的なリストをPHPの構文配列にフォーマットし、ユーザの入力にその存在を確認することができますか?ありがとう!phpフォームcurse-word入力フィルタソリューション

+6

あなたは、http([無益とエラーが発生しやすい]どのように実現しますか。 org/wiki/Scunthorpe_problem)このタイプのものは何ですか? –

+0

私は@Wesleyに同意します。必要ならばそれをフィルターにかけるが、["お尻"(http://en.wikipedia.org/wiki/Ass)はロバの一種["Scunthorpe"](http://en.wikipedia。 org/wiki/Scunthorpe_problem)はイギリスの町であり[http://www.thefreedictionary.com/sniggers]は笑いを意味する["sniggers"]。 [clbuttic mistake]を見てください(http://thedailywtf.com/Articles/The-Clbuttic-Mistake-.aspx)。 – Spudley

+1

の可能な複製[良い冒涜フィルタを実装するにはどうすればいいですか?](http://stackoverflow.com/questions/273516/how-do-you-implement-a-good-profanity-filter) - その他の結果](http://stackoverflow.com/search?q=php+swear+filter)も同様に、これと共通の落とし穴を実装する方法とディスカッションの両方で説明します。単にクライアントを安らかにするために、ほとんどの一般的な言葉でpreg_replaceを実行します。 –

答えて

7

This should be able to get you startedが、あなたが自分で悪い言葉を入力する必要があります。 You can download a list of bad words here.

ただし、誓い語フィルタには克服できない問題がいくつかあります。英語はあまりにも柔軟性があり、人々がさまざまな方法で誓いを綴ることを防ぐことができます。 @$$h01eをブロックすることができても、確実にαṡṡhølεをブロックすることは決してありません。character translatorで簡単に作成できます。各単語と手紙に20以上の代替候補がある場合、すべての可能性を除外することもできません。

また、誓いの言葉フィルタがあると気づくと、それを妨害する方法を見つけ出すゲームになる可能性があり、これはあなたが始めたよりも誓いにつながります! 人々が誓いたいのであれば、そうする方法を見つけるでしょう。幸いにも、既にこの問題に取り組んでいる多くのサイトがあります。あなたができることは、あなたのウェブサイトとコンテンツの可能な限りの最高の体験を提供し、単純なフラグ機能を提供して、ユーザーが予防できないケースを通知できるようにすることです。

Stackoverflowには呪いの単語フィルタはありません。ここでどのくらいの頻度で誓いをしていますか?人間の仕事をするためにコンピュータを送らないでください。 :D

1

これは、これは誰も私に知らせて助け場合、私はクライアントのために作られた冒涜フィルターです://en.wikipedia:D

// function use cleanItUp($cmt:String,$wordlist:String,$character:string,$returnCount:boolean) 
//$cmt 
//  Expects a string; 
//   ex:'this is a lovely day to walk the dog' 
//$wordlist 
//  Expects a list of words to be replaced seporated by a verticle line '|' 
//  default world list provided; 
//    ex:'is|fun|good|dog' 
//$character 
//  Expects a single character to replace each character of the replaced word 
//  default is an asterix '*' 
//$returnCount 
//  Expects true if you would only like to return the amount of words that were replaced; 
//  default is set to false 

// Usage Example 
//  using default word list 
//   cleanItUp('this is a lovely day to walk the dog'); 
//   returns 'this is a lovely day to walk the dog' 
//  using custom wordlist 
//   cleanItUp('this is a lovely day to walk the dog','is|day|dog'); 
//   returns 'this ** a lovely *** to walk the ***' 
//  using custom wordlist and character 
//   cleanItUp('this is a lovely day to walk the dog','is|day|dog','#'); 
//   returns 'this ## a lovely ### to walk the ###'; 
//  using custom wordlist and setting $returnCount to true 
//   cleanItUp('this is a lovely day to walk the dog','is|day|dog','#',true); 
//   returns 3; 
function cleanItUp($cmt,$wordlist=null,$character="*",$returnCount=false) 
{   
    if($wordlist==null) 
    { 
     $wordlist="nigga|nigger|niggers|sandnigger|sandniggers|sandniggas|sandnigga|honky|honkies|chink|chinks|gook|gooks|wetback|wetbacks|spick|spik|spicks|spiks|bitch|bitches|bitchy|bitching|cunt|cunts|twat|twats|fag|fags|faggot|faggots|faggit|faggits|ass|asses|asshole|assholes|shit|shits|shitty|shity|dick|dicks|pussy|pussies|pussys|fuck|fucks|fucker|fucka|fuckers|fuckas|fucking|fuckin|fucked|motherfucker|motherfuckers|motherfucking|motherfuckin|mothafucker|mothafucka|motherfucka"; 
    } 
    $replace = 'preg_replace("/./","' .$character .'","\\1")'; 
    $comment = preg_replace("/\b($wordlist)\b/ie", $replace,$cmt,-1,$count); 

    if($returnCount!=false) 
    { 
     return $count; 
    } 
    elseif($returnCount!=true) 
    { 
     return $comment; 
    } 
} 
関連する問題