Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Cenzura
Wredny
post 11.08.2008, 10:37:10
Post #1





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 24.08.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


Witam mam takie pytanie pisze skrypt który ocenzuruje mi słowa wulgarne.


zastanawiałem się jak to zrobić wykorzystam do tego funkcje str_replace i by to wyglądało tak:
  1. <?php
  2. $tekst = str_replace('wulgarneslowo1, '!cenzura!', $tekst);
  3. $tekst = str_replace('wulgarneslowo2, '!cenzura!', $tekst);
  4. $tekst = str_replace('wulgarneslowo3, '!cenzura!', $tekst;
  5. $tekst = str_replace('wulgarneslowo4, '!cenzura!', $tekst);
  6. $tekst = str_replace('wulgarneslowo5, '!cenzura!', $tekst);
  7. $tekst = str_replace('wulgarneslowo6, '!cenzura!', $tekst);
  8. ?>

tylko zamiast wulgarneslowo1 bylo by przekleństwo które zostanie zamienione na !cenzura!
ale takie wstawianie jest monotonne po prostu długo się wstawia.
moje pytanie czy nie da się tego zrobić tak że np.
Że utworze plik txt a w nim wulgaryzmy jeden pod drugim:
Kod
wulgarneslowo1
   wulgarneslowo2
   wulgarneslowo3
   wulgarneslowo4
   wulgarneslowo5
   wulgarneslowo6
   wulgarneslowo7

i tak dalej i potem skrypt pobierze te słowa i wstawi je sam do funkcji str_replace?


--------------------
eeeeee....
Go to the top of the page
+Quote Post
Shili
post 11.08.2008, 10:40:10
Post #2





Grupa: Zarejestrowani
Postów: 1 085
Pomógł: 231
Dołączył: 12.05.2008

Ostrzeżenie: (0%)
-----


Da się jak najbardziej. Poczytaj sobie w manualu o plikach (fopen, file_get_contents, file itd), potem pobierz sobie wszystkie słowa z pliku do tablicy, bo przecież str_replace może jako argumenty przyjmować tablice winksmiley.jpg
Go to the top of the page
+Quote Post
f1xer
post 11.08.2008, 10:46:55
Post #3





Grupa: Zarejestrowani
Postów: 403
Pomógł: 68
Dołączył: 20.03.2008

Ostrzeżenie: (0%)
-----


  1. <?php
  2. $cenzura=file("sciezka/do/pliku/plik.txt");
  3. foreach($cenzura as $slowo)
  4. {
  5. $tekst=str_replace($slowo,'!cenzura!',$tekst);
  6. }
  7. echo $tekst;
  8. ?>


Powinno działać


--------------------
Pomogłem? wyraź to i kliknij "Pomógł"
Go to the top of the page
+Quote Post
Wredny
post 11.08.2008, 11:32:41
Post #4





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 24.08.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


a jeżeli moja baza zawiera 2145 słowa czy przy wykonywaniu skryptu nie obciąży to serwera?


--------------------
eeeeee....
Go to the top of the page
+Quote Post
klocu
post 11.08.2008, 11:41:30
Post #5





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


Możesz to zrobić podobnie jak wyżej z małym ale.
Ładujesz cały plik poprzez file. Masz go już w tablicy Pamiętaj że na końcu każdego wiersza masz znak kończący więc musisz się go pozbyć.

Ale lepiej byłoby zamienić całą tablicę wczytaną przez file JEDNYM str_replacem a nie wykonywanym tysiące razy. Skoro robisz to samo i możesz to zrobić prościej rób to.

Zresztą koledzy wyżej dali Ci przykład i w oparciu o to zbuduj własny system.

Kod f1xer'a nie działa bo wali się to na znaku końca linii jak mówiłem. (działa tylko na ostatnim słowie po którym nie ma entera)

Ten post edytował klocu 11.08.2008, 11:45:27
Go to the top of the page
+Quote Post
Wredny
post 11.08.2008, 11:52:08
Post #6





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 24.08.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


może jest proste ale ja np nie wiem prostej rzeczy po co w przykładzie który podał f1xer na końcu echo $tekst;? to do tego aby mi wyświetliło ocenzurowany tekst? i dlaczego tam nie ma takiego czegoś na początku jak :
  1. <?php
  2. $cos = fopen("shouts.txt","r");
  3. ?>

?
Możecie dać "jaśniejszy" przykład ?


i cos nie tak z tym kodem f1xer pobiera tylko jeden wyraz

Ten post edytował Wredny 11.08.2008, 11:54:08


--------------------
eeeeee....
Go to the top of the page
+Quote Post
klocu
post 11.08.2008, 11:56:10
Post #7





Grupa: Zarejestrowani
Postów: 291
Pomógł: 45
Dołączył: 21.08.2007

Ostrzeżenie: (0%)
-----


To jest proste. To są podstawy w manualu. Nie ma fopen bo jest file (wczytuje cały plik do tablicy - każdy rząd nowym rekordem).
Echo jest do wyświetlenia.
Patrząc od strony optymalizacji, można to wczytać poprzez file, obciąć białe znaki i nadpisać tablicę, ale robić to za każdym razem - serwer Ci się spoci.

Ten kod nie pobiera jednego wyrazu, tylko serię wyrazów.
Go to the top of the page
+Quote Post
Wredny
post 11.08.2008, 12:00:21
Post #8





Grupa: Zarejestrowani
Postów: 36
Pomógł: 0
Dołączył: 24.08.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


no dobra ale dlaczego to mi cenzuruje tylko ostatnie słowo? z pliku txt?

Ten post edytował Wredny 11.08.2008, 12:05:42


--------------------
eeeeee....
Go to the top of the page
+Quote Post
Михаил_з_СССР
post 11.08.2008, 16:00:11
Post #9





Grupa: Zarejestrowani
Postów: 17
Pomógł: 0
Dołączył: 11.07.2008
Skąd: СССР

Ostrzeżenie: (0%)
-----


Tylko pamiętaj by przed słowem takim jak np. (TYLKO PRZYKŁAD!) chuj dać spację. Jeśli tak nie zrobisz gdy ktoś napisze nie podsłuchuj, wyświetli się "nie podsłu!cenzura!". Taka mała rada na przyszłość.


--------------------
Go to the top of the page
+Quote Post
Crozin
post 11.08.2008, 16:23:25
Post #10





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Plik ze slowami
Kod
abc1
abc2
abc3
abcN
Kod skryputu:
  1. <?
  2.  
  3. $words = file('words.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  4.  
  5.  
  6. $someText = str_replace($words, '!cenzura', $someText);
  7.  
  8. ?>
Go to the top of the page
+Quote Post
-___-
post 19.08.2008, 11:28:51
Post #11





Goście







Cytat
Tylko pamiętaj by przed słowem takim jak np. (TYLKO PRZYKŁAD!) chuj dać spację. Jeśli tak nie zrobisz gdy ktoś napisze nie podsłuchuj, wyświetli się "nie podsłu!cenzura!". Taka mała rada na przyszłość.



Czyli jeżeli dobrze rozumiem.
mam słowo ala, które ma mi zamienić na kasia, aby słowa bala mi nie zamieniło na bkasia musze przed ala dać spację questionmark.gif czy źle rozumiem questionmark.gif

Pattern musi zaczynać się od spacji, aby dopasowanie było strict a nie loose questionmark.gif czy może da się to zastąpić inaczej, bo ja mam preg_replace początkowo do tego użyty ale nie chciałbym dodawać za każdym razem spacji na początek bo łatwo można o tym zapomnieć.

PS. takie dodatkowe pytanie lepiej pattern i replace trzymać w bazie czy lepiej walnąć sobie to w XML questionmark.gif
Go to the top of the page
+Quote Post
Crozin
post 19.08.2008, 11:58:59
Post #12





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

Ostrzeżenie: (0%)
-----


  1. <?
  2. $words = file('words.txt', FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
  3. foreach($words as &$word)
  4. $word = ' ' . $word . ' ';
  5.  
  6. $someText = str_replace($words, '!cenzura', $someText);
  7. ?>
Chociaż wg mnie tworzenie cenzury jest bezcelowe... jeśli ktoś będzie chciał Ci nabluzgać to nabluzga (z tym, że zamiast PRZEKLENSTWO napisze PRZE KLE NSTWO). Jeśli komuś się zapomni co nieco, niech moderator wyedytuje treść, a delikfenta zbanować (dać ostrzeżenie)

Cytat
PS. takie dodatkowe pytanie lepiej pattern i replace trzymać w bazie czy lepiej walnąć sobie to w XML
W czym Ci wygodniej (mi osobiście byłoby w bazie danych). Zawsze możesz zrobić cache'a tego.
Go to the top of the page
+Quote Post
--mateomm--
post 21.08.2008, 14:24:20
Post #13





Goście







W aktualnej formie skryptu do cenzurowania, jaki podany jest wyżej każde wystąpienie słowa wulgarnego będzie cenzurowane. A czy jest możliwe, aby nasze wyrażenie regularne nie cenzurowało słowa będącego linkiem ?

mam np tekxt... <a href="#">abc wylgaryzm abc</a> ..., text

chciałbym aby w tekście słowa mi cenzurowało, ale w linku nie. Czy jest to możliwe ?
Moge liczyc na Wasza pomoc ?

Z gory bardzo dziekuje i pozdrawiam
M
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 20.04.2024 - 03:50