-2

サイトで特定の単語を検閲したいのですが、単語ごとに検閲された出力が異なります。

例えば:

PHP => P*P、javascript => j*vascript

(ただし、常に 2 番目の文字であるとは限りません。)

したがって、単純な「1 つ星」の検閲システムが必要ですが、元の上限は維持されます。データベースからのデータは検閲されていないため、可能な限り最速の方法が必要です。

$data="Javascript and php are awesome!";

$word[]="PHP";
$censor[]="H";//the letter we want to replace

$word[]="javascript";
$censor[]="a"//but only once (j*v*script would look wierd)
//Of course if it needed we can use the full censored word in $censor variables

期待値: J*vascript と p*p は最高です!

すべての答えをありがとう!

4

5 に答える 5

2

単語と置換の配列を作成します。これは、処理に関しては最速のオプションですが、セットアップはもう少し整然としています。i修飾子を使用して各パターンの大文字と小文字を区別しないようにパターンを設定するときを思い出してください。最終的に、これらをデータベースから配列にプルできます。ここでは、例として配列をハードコーディングしました。

<!DOCTYPE html>
<html>
<meta content="text/html; charset=UTF-8" http-equiv="content-type">
<?php

$word_to_alter = array(
'!(j)a(v)a(script)(s|ing|ed)?!i',
'!(p)h(p)!i',
'!(m)y(sql)!i',
'!(p)(yth)o(n)!i',
'!(r)u(by)!i',
'!(ВЗЛ)О(М)!iu',
);

$alteration = array(
'$1*$2*$3$4',
'$1*$2',
'$1*$2',
'$1$2*$3',
'$1*$2',
'$1*$2',

);

$string = "Welcome to the world of programming. You can learn PHP, MySQL, Python, Ruby, and Javascript all at your own pace. If you know someone who uses javascripting in their daily routine you can ask them about becoming a programmer who writes JavaScripts. взлом прохладно";

$newstring = preg_replace($word_to_alter,$alteration,$string);

echo $newstring;

?>

</html>

出力

プログラミングの世界へようこそ。P*P、M*SQL、Pyth*n、R*by、および J*v*script をすべて自分のペースで学習できます。日常生活で j*v* スクリプトを使用している人を知っている場合は、J*v* スクリプトを作成するプログラマーになることについて尋ねることができます。взл*м прохладно

アップデート

UTF-8 文字でも同じように機能します。パターンを UTF-8 として扱うには、修飾子を指定する必要がuあることに注意してください。

u (PCRE_UTF8) この修飾子は、Perl と互換性のない PCRE の追加機能をオンにします。パターン文字列は UTF-8 として扱われます。この修飾子は、UNIX では PHP 4.1.0 以降、win32 では PHP 4.2.3 以降で利用できます。PHP 4.3.5 以降、パターンの UTF-8 有効性がチェックされます。

于 2013-08-14T19:06:49.587 に答える
0

これは私がすることです:

  1. 単純なデータベース (テキスト ファイル) を作成し、すべての検閲された単語と予測される検閲結果の "テーブル" を作成します。例えば:

    PHP --- P*P
    javascript --- j*vascript
    HTML --- HT*L
    
  2. データベース情報を単純な打ち切りファイルと比較するための PHP コードを記述します。array explode単語のみの配列を作成するために使用する必要があります。このようなもの:

    /* Opening database of censored words */
    $filename = "/files/censored_words.txt";
    $file = fopen( $filename, "r" );
    
    if( $file == false )
    {
        echo ( "Error in opening file" );
        exit();
    }
    
    /* Creating an array of words from string*/
    $data = explode(" ", $data); // What was "Javascript and PHP are awesome!" has
                                 // become "Javascript", "and", "PHP", "are", 
                                 // "awesome!". This is useful.
    
  3. スクリプトが一致する単語を見つけた場合は、データ内の単語をリストの検閲された単語に置き換えます。\r\n最初に で、最後にでファイルを区切る必要があります---。(または、テーブルを区切るために選択したものは何でも。)

これが役に立ったことを願っています!

于 2013-08-14T17:26:41.543 に答える
0

検閲された単語の小文字のリストをどこかに保存できます。毎回 2 番目の文字にスターを付けても問題ない場合は、次のようにします。

if (in_array(strtolower($word), $censored_words)) {
    $word = substr($word, 0, 1) . "*" . substr($word, 2);
} 

文字の最初の出現を変更したい場合は、次のようにすることができます。

$censored_words = array('javascript' => 'a', 'php' => 'h', 'ruby' => 'b');
$lword = strtolower($word);
if (in_array($lword, array_keys($censored_words))) {
    $ind = strpos($lword, $censored_words[$lword]);
    $word = substr($word, 0, $ind) . "*" . substr($word, $ind + 1);
}
于 2013-08-14T17:11:07.113 に答える