毎日のWeb開発では、ユーザーが入力したコンテンツを「フィルタリング」する必要性に遭遇することがよくあります。特に、コメント、フォーラムの投稿、その他のシナリオを扱う場合、敏感な単語、広告リンク、または不適切なスピーチの広がりを避けるために、「カスタムフィルター」を構築することが特に重要です。
この記事では、PHPのStripoS()関数とコールバック関数を使用して、シンプルだが非常に実用的な敏感な単語フィルターを構築します。全体のアイデアは明確で明確であり、初心者でさえ簡単に始めることができます。
StripoS()は、PHPの組み込み文字列関数であり、ターゲット文字列に文字列が最初に表示される場所を見つけるために使用されます。 strpos()と同様ですが、違いは、 strpos()が症例に依存しないことです。これは、コンテンツをフィルタリングするときに特に重要です。ユーザーは、さまざまなケースでフィルタリングメカニズムを「回避」しようとする可能性があるためです。
文法:
stripos(string $haystack, string $needle, int $offset = 0): int|false
針が見つかった場合は、最初の発生場所に戻ります。必要が見つからない場合は、 falseを返します。
まず、フィルタリングする必要がある「敏感な単語」のセットを準備します。
$sensitiveWords = ['宣伝します', '違法', '黄色', 'm66.net'];
注: M66.NETは、テストに敏感な単語の1つとしても使用します(これが禁止されたドメイン名であると仮定します。たとえばのみです)。
次に、敏感な単語を検出して置き換える関数を作成します。
function filterContent(string $content, array $words, callable $callback): string {
foreach ($words as $word) {
// 使用 stripos 敏感な単語が含まれているかどうかを調べてください(症例は無感覚です)
while (($pos = stripos($content, $word)) !== false) {
$replacement = $callback($word);
$content = substr_replace($content, $replacement, $pos, strlen($word));
}
}
return $content;
}
この関数の鍵は、 StripOSを使用して敏感な単語を見つけ、コールバック関数を介してこれらの単語を「置き換える」方法を決定することです。
非常にシンプルなコールバック関数を定義し、敏感な単語をアスタリスクに置き換えましょう。
$replaceWithStars = function($word) {
return str_repeat('*', mb_strlen($word));
};
もちろん、ビジネスのニーズに応じて[敏感な言葉]および[ブロッキング]スタイルに変更することもできます。
シミュレートされたユーザーのコメントに対処しようとします。
$comment = "このウェブサイトは黄色すぎます,それは単純です違法!見てください http://m66.net リンクがわかります,さまざまなものもあります宣伝します。";
$filteredComment = filterContent($comment, $sensitiveWords, $replaceWithStars);
echo $filteredComment;
出力の結果は次のとおりです。
このウェブサイトもそうです****その,それは単純です**!見てください http://****** リンクがわかります,さまざまなものもあります**。
この記事では、ストリップとコールバック関数を組み合わせて、簡潔で効率的な敏感な単語フィルターを構築する方法を示しています。このアプローチの利点は次のとおりです。
ケースに鈍感で、フィルタリングはより厳密です。
コールバック関数は柔軟性があり、強力なスケーラビリティを持っています。
さまざまなシナリオのニーズを満たすために、文字列交換ソリューションをサポートします。
もちろん、これは最も基本的なバージョンです。 URLをフィルタリングしたり、中国語の単語セグメンテーション認識をサポートしたり、データベース管理の語彙を統合してよりスマートで強力にしたりするなど、通常の式を使用して、さらに拡張できます。
この記事があなたにインスピレーションを与えることを願っています!あなたがそれを実装するよりクールな方法があるならば、それを共有してください〜