Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [PHP]Cenzor
kaiba55
post 27.09.2012, 08:51:31
Post #1





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


Witam serdecznie. Mam problem ze zrobieniem cenzora.
Chodzi o coś takiego, że mam plik cenzor.txt
Zawartość tego pliku przerzucam do tablicy. A potem chce by każdy element tej tablicy zamieniał na #CENZOR
Próbowałem tak:
  1. <?php
  2. $a="cenzor.txt";
  3. $plik=file($a);
  4. $z='napis a potem brzydkiesłowo <br>';
  5. for($i=count($plik);$i>=0;$i--)
  6. $f=str_replace($plik[$i],"#CENZOR", $z);
  7. echo $f;
  8.  
  9.  
  10.  
  11. ?>


Liczę na waszą pomoc.
Pozdrawiam.
Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 09:00:10
Post #2





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Jeśli w $plik masz po prostu tablicę słow to wystarczy:

  1. $f = str_replace(array_reverse($plik),'#cenzor',$z);


O to chodziło? To w sumie jest to samo co napisałeś. Ale nie napisałeś do końca w czym problem/co nie działa...


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 09:02:54
Post #3





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


chodzi o to że nie zamienia tego brzydkiego wyrazu na cenzor wink.gif
z twoim kodem też nie zamienia, pokazuje to samo zdanie co w zmiennej z
Go to the top of the page
+Quote Post
viking
post 27.09.2012, 09:03:31
Post #4





Grupa: Zarejestrowani
Postów: 6 377
Pomógł: 1116
Dołączył: 30.08.2006

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


Co nie zmienia faktu że robienie takiej cenzury zazwyczaj nie ma żadnego sensu. Zaraz zacznie się obchodzenie przez dowolne znaki albo zapis podobny fonetycznie.
http://php.net/manual/en/function.levenshtein.php


--------------------
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 09:06:56
Post #5





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


być może, na początek jednak wystarczy, potem przerzucę się na twoją funkcję, jak ją ogarnę

jednak nurtuje mnie co w moim kodzie jest źle smile.gif
Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 09:08:43
Post #6





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


To prawda - zgadzam się z przedmówcą. Pomogę jednak smile.gif

Autorze - sprawdź koniecznie kodowanie obu plików czyli tego cenzor.txt i skryptu w jakim to odpalasz. Dobrze by było też sprawdzić te dane które wrzucasz do cenzurowania. Wszystko musi mieć to samo kodowanie.

Po drugie sprawdź co dokładnie zawiera tablica $plik - może plik jest źle zrobiony i w tej tablicy są bzdury.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 09:12:19
Post #7





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


poprawiłem kodowania na te same, dalej nic
sprawdziłem co zawiera ten plik oczywiście wcześniej:
brzydkie słowo1
brzydkie słowo2
brzydkie słowo3

więc niby powinno być ok
chyba że nie mogę wykorzystać str_replace do zamiany elementu z tablicy na string
Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 09:34:35
Post #8





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Możesz. Sprawdź jeszcze w ten sposób, że utwórz tablicę PHP i wpisz do niej te brzydkie słowa - zamiast ładować je z pliku. Tak dla testu.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 12:06:07
Post #9





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


kiedy zrobiłem tak:
  1. <?php
  2. $plik[0] = "brzydkie1";
  3. $plik[1] = "brzydkie2";
  4. $plik[2] = "brzydkie3";
  5. $z='napis a potem brzydkie1 <br>';
  6. for($i=count($plik);$i>=0;$i--)
  7. $f=str_replace($plik,"#CENZOR", $z);
  8. echo $f;
  9.  
  10.  
  11.  
  12. ?>
  13.  


to działa

Więc co jest nie tak jak wczytuje z pliku?
Go to the top of the page
+Quote Post
peter13135
post 27.09.2012, 12:07:27
Post #10





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


print_r($plik); i zobacz czym różnią się te tablice.


--------------------
:)
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 12:15:48
Post #11





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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




Array ( [0] => słowo1 [1] => słowo2 [2] => słowo3 ) - zwykła tablica

Array ( [0] => ďťżsłowo1 [1] => słowo2 [2] => słowo3 ) - z pliku

Ale nawet jak dałem inne słowo do cenzury w przypadku w wersji z pliku, to też nie zamienia tego słowa na cenzor

może tego nie da się technicznie zrobić?

Ten post edytował kaiba55 27.09.2012, 12:16:40
Go to the top of the page
+Quote Post
b4rt3kk
post 27.09.2012, 12:20:49
Post #12





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Użyj funkcji trim($klucz).

  1. $f=str_replace(trim($plik),"#CENZOR", $z);


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 12:22:44
Post #13





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


kod wygląda teraz tak:
  1. <?php
  2. $a="cenzor.txt";
  3. $plik=file($a);
  4. $z='napis a potem brzydkie1 <br>';
  5. for($i=count($plik);$i>=0;$i--)
  6. $f=str_replace(trim($plik),"#CENZOR", $z);
  7. echo $f;
  8.  
  9. ?>


Ale niestety dalej nic to nie dało..

Ten post edytował kaiba55 27.09.2012, 12:22:56
Go to the top of the page
+Quote Post
abort
post 27.09.2012, 12:24:01
Post #14





Grupa: Zarejestrowani
Postów: 590
Pomógł: 107
Dołączył: 25.10.2011

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


Cytat(kaiba55 @ 27.09.2012, 13:15:48 ) *
może tego nie da się technicznie zrobić?

Da się. Wszystko się da. Z wyjątkiem (że wejdę na tematy wojskowe) tego, że nie da się okopać się w wodzie i nie da sie odkręcić orzełka od hełmu.
A do Twojego problemu, w dziś zaprezentowanym kodzie masz
  1. $f=str_replace($plik,"#CENZOR", $z);

A (skoro operujesz na tablicach) powinno chyba być:
  1. $f=str_replace($plik[$i],"#CENZOR", $z);


I na wszelki wypadek zrezygnuj (przynajmniej na czas testów) z polskich diakrytyków i ogranicz się do używania liter z zakresu US-ASCII.
Go to the top of the page
+Quote Post
b4rt3kk
post 27.09.2012, 12:24:44
Post #15





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


Bo nie dodałeś indeksu, do $plik:

  1. $f=str_replace(trim($plik[$i]),"#CENZOR", $z);


a jakby nie było to jednak tablica.


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 12:26:18
Post #16





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


tak też próbowałem już wcześniej i dalej nic
słowa w pliku tekstowym są małą literą i bez polskich znaków

edit: b4rt3kk twój sposób też na nic


Ten post edytował kaiba55 27.09.2012, 12:27:16
Go to the top of the page
+Quote Post
viking
post 27.09.2012, 12:28:58
Post #17





Grupa: Zarejestrowani
Postów: 6 377
Pomógł: 1116
Dołączył: 30.08.2006

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


Zapisz jeszcze raz plik bez BOM (te 3 pierwsze znaki które wkleiłeś). Poszukaj ustawień edytora żeby to wyłączyć.


--------------------
Go to the top of the page
+Quote Post
Sephirus
post 27.09.2012, 12:30:56
Post #18





Grupa: Zarejestrowani
Postów: 1 527
Pomógł: 438
Dołączył: 28.06.2011
Skąd: Warszawa

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


Ja bym stawiał dalej na kodowanie - coś musi być w tym pliku "cenzor.txt" z kodowaniem nie tak... Spróbuj to przerzucić może do zwykłego notatnika, utwórz tamten plik na nowo z kodowaniem takim jak skrypt/dane i wklej lub coś w ten deseń.


--------------------
If you're good at something, never do it for free.
Potrzebujesz skryptu JS lub PHP - szukasz kogoś kto przetestuje twoją aplikację pod względem bezpieczeństwa? Szybko i solidnie? Napisz ;)
Mój blog - Jak zwiększyć wydajność front-endu - O buforowaniu wyjścia w PHP słów kilka...
Go to the top of the page
+Quote Post
kaiba55
post 27.09.2012, 12:31:50
Post #19





Grupa: Zarejestrowani
Postów: 75
Pomógł: 0
Dołączył: 29.01.2010

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


niestety nie do końca wiem jak to zrobić, jest w notatniku taka opcja?
jak coś korzystam z pspad, ale totalnie nie wiem gdzie to znaleźć

ten plik cenzor.txt zrobiłem w notatniku
oba moje pliki mają kodowanie UTF-8

Ten post edytował kaiba55 27.09.2012, 12:33:28
Go to the top of the page
+Quote Post
b4rt3kk
post 27.09.2012, 12:54:54
Post #20





Grupa: Zarejestrowani
Postów: 1 933
Pomógł: 460
Dołączył: 2.04.2010
Skąd: Lublin

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


To zadziała:

  1. <?php
  2. $a="cenzor.txt";
  3. $plik=file($a);
  4. $z='napis a potem brzydkie1 <br>';
  5. var_dump($plik);
  6. for ($i=0; $i<sizeof($plik); $i++)
  7. $f = str_replace(rtrim(trim($plik[$i])), '#CENZURA', $z);
  8. echo $f;
  9.  
  10. ?>


Zauważ, że po wyświetleniu var_dump tablicy z pliku pierwszy wiersz ma 2 nadprogramowe znaki.


EDIT:

Poprawka, wiem gdzie jest błąd. Otóż tak:

1. pierwszy obrót pętli, do $f przypisujemy 'napis a potem brzydkie1 <br>', ciąg zostaje zamieniony na 'napis a potem #CENZURA <br>'
2. po czym następuje kolejny obrót pętli, gdzie do $f znów przypisany jest ciąg 'napis a potem brzydkie1 <br>', więc ocenzurowany tekst znów jest w pierwotnej wersji.
3. jako wynik otrzymujemy więc 'napis a potem brzydkie1 <br>'

tak więc cenzuruje w pętli po jednym wyrazie, po czym znów mamy ciąg pierwotny i zostanie ocenzurowany tylko ten wyraz, który występuje pod ostatnim indeksem w pętli.

Poprawny kod:

  1. <?php
  2. $a="cenzor.txt";
  3. $plik=file($a);
  4. $z='napis a potem brzydkie1 <br>';
  5. var_dump($plik);
  6.  
  7. for ($i=0; $i<sizeof($plik); $i++)
  8. $z = str_replace(rtrim(trim($plik[$i])), '#CENZURA', $z);
  9. echo $z;
  10.  
  11. ?>


Ten post edytował b4rt3kk 27.09.2012, 13:06:12


--------------------
Jeśli pomogłem, kliknij proszę 'pomógł'. Dzięki.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
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: 12.06.2025 - 16:52