Ben gibi kötü kelimelerin bir listesini filtrelemek için gereken bazı metin var:
$bad_words = array(
'word1' => 'gosh',
'word2' => 'darn',
);
I can bu ve bir anda yerini ancak yavaş doğru döngü? Daha iyi bir yolu var mı?
teşekkürler
Evet, vardır. Kullan preg_replace_callback()
a>:
<?php
header('Content-Type: text/plain');
$text = 'word1 some more words. word2 and some more words';
$text = preg_replace_callback('!\w+!', 'filter_bad_words', $text);
echo $text;
$bad_words = array(
'word1' => 'gosh',
'word2' => 'darn',
);
function filter_bad_words($matches) {
global $bad_words;
$replace = $bad_words[$matches[0]];
return isset($replace) ? $replace : $matches[0];
}
?>
Basit bir filtre ama birçok sınırlamalar vardır. O kadar imlâ, harfler arasındaki boşluk veya diğer non-word karakter kullanımı, sayılar harfler değiştirilmesi ve varyasyonları durmayacak gibi. Ama nasıl sofistike siz olmak istiyorsanız temelde size kalmış.
str_ireplace() arama ve değiştirme argümanlar her ikisi için bir dizi alabilir. Bu gibi mevcut dizi ile kullanabilirsiniz:
$unfiltered_string = "gosh and darn are bad words";
$filtered_string = str_ireplace(array_vals($bad_words), array_keys($bad_words), $unfiltered_string);
// $filtered string now contains: "word1 and word2 are bad words"