Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP & MySQL] Cenzura słów z bazy ...
Forum PHP.pl > Forum > Przedszkole
Jawor
witam ... mam system komentarzy ... chce zrobic cenzure ...
problem moj jest nastepujacy :

komentarze sa pobierane z bazy ... slowa do cenzurowania rowiez ... probowalem to zrobic w taki sposob:

[php:1:d32b4a1ae2]
<?
// petla pokazywania komentarzy ... to dziala OK
while($c = mysql_fetch_array($comm)) {

echo $c['nick'];

echo ' - ';

echo $c['date'];

echo '<br>';

// tutaj chcialem zrobic aby mi cenzurowalo wpis ... probowalem zastosowac petle w petli ... ale tutaj jest problem gdyz nie cenzuruje textu :/ najprawdopodobniej nie pobiera slow z bazy bo jak usune petle i wstawie wlasne slowa to jesy OK ...
while($cen = mysql_fetch_array($cen2)) {
$c['text'] = str_replace ($cen['slowo'], $cen['zamien'], $c['text']);
}
echo $c['text'];

}
?>
[/php:1:d32b4a1ae2]

zapytania sa dobre ...

w bazie slowa mam w sposob:
id slowo zamiennik
1 bla ble
2 he heeh
Majdan
Może :arrow: [manual:12b57a0b7e]str_replace[/manual:12b57a0b7e]().
[php:1:12b57a0b7e]<?php
// tu ma być tablica tekst z tekstem do zcenzurowania
$co = array("wulgaryzm1", "wulgaryzm2");
$x = "[cenzura]";
for ($i=0; $i<=count($tekst); $i++) {
echo str_replace($co, $x, $tekst[$i]);
}
?>[/php:1:12b57a0b7e]

Pisałem z palca więc coś mogło mi się machnąć.
Dravo
Radziłbym cenzurować przed dodaniem, ponieważ robisz tą samą akcję tylko raz, natomiast gdybyś chcaił zaraz po pobraniu to każdy będzie musiał wykonywać fukcję cenzurującą.
cichy
a ja proponuje wybrac słowa cenzurowane tylko raz i wrzucić je do tablic:
np $co i $naco po czym używać ich w każdym poście i zmieniać te wyrazy.
poprzez normalnie str_replace()
Nie przedłuża to znacząco czasu wykonywania skryptu a na pewno zmniejsza ilosć zapytań pobierających cenzure z bazy przy każdym poście winksmiley.jpg

Pozdro
Majdan
Simpson, chodziło Ci chyba o taki kod jaki podałem :?:
cichy
Cytat
Simpson, chodziło Ci chyba o taki kod jaki podałem :?:

No coś w tym stylu.
Aczkowiek.
Gdyby zrobić to tak że do każdego wyrazu jest przypisany wyraz zastępczy to można by sie pozbyć pętli winksmiley.jpg

Pozdro
Majdan
Pętla służy do zamiany stringów, które sš przechowywane w tablicy, a wulgaryzmy zamieniane sš tylko raz dla każdego ze stringów.

Czyli o to Ci chodzi:
[php:1:a4abcaf6a9]<?php
$tekst = "wulgaryzm1 kjfaidoond wulgaryzm2";
$co = array("wulgaryzm1", "wulgaryzm2");
$x = "[cenzura]";
echo str_replace($co, $x, $tekst);
?>[/php:1:a4abcaf6a9]
cichy
NO dokładnie..
Nigdy nie bawiłęm sie ze str_replace w ten sposob że jest jedna tablica i jeden string.. i wszystkie elementy z tablicy zamieni na ten string więc nie wiedziałęm czy w tą strone zadziała winksmiley.jpg

Pozdro
Jawor
Cytat
Radziłbym cenzurować przed dodaniem, ponieważ robisz tą samą akcję tylko raz, natomiast gdybyś chcaił zaraz po pobraniu to każdy będzie musiał wykonywać fukcję cenzurującą.

Dobry pomysł ...
ale to i tak nie rozwiazuje mojego problemu ...
bo i tak mi zamienia tylko slowo ostatnio dodane do bazy ... o najwiekszym id ... :/

zapytania mam takie
[php:1:1b21600346]
<?
$cen1 = "SELECT * FROM censure";
$cen2 = mysql_query($cen1);
?>
[/php:1:1b21600346]
nastepnie petla pobieram slowa:
[php:1:1b21600346]
<?
while($cen = mysql_fetch_array($cen2)) {
$slowo = $cen[slowo];
$zamien = $cen[zamien];
}
?>
[/php:1:1b21600346]

i probuje zamienic ew. przeklenstwa na odpowiedni zamiennki
[php:1:1b21600346]
<?
$text = str_replace ($slowo, $zamien, $text);
?>
[/php:1:1b21600346]
ale tak jak jush pisalem zamienia mi sie tylko slowo ktore bylo najpozniej dodane do bazy...

pomocy :/
probowalem roznie to zmieniac ale nic nie wychodzi sad.gif
Majdan
Nie bardzo wiem, o co Ci chodzi.
Podałem Ci już jak to ma wyglšdać.

O to Ci chodzi: :?:
[php:1:7e9b88d718]<?php
$co = array("wulgaryzm1", "wulgaryzm2"); // lista wulgaryzmow do zamiany
$x = "[cenzura]"; // na jaki wyraz ma zamieniac wulgaryzmy
$cen1 = "SELECT * FROM censure";
$cen2 = mysql_query($cen1);
while($cen = mysql_fetch_array($cen2)) {
echo str_replace($co, $x, $cen['slowo']);
}
?>[/php:1:7e9b88d718]
Jawor
nie ...

chodzi mi o to zeby wulgaryzmy i slowa na jakie ma zamieniac byly pobierane z bazy ...

sa one tam umieszczone w postaci :

id slowo zamiennik
1 przeklenstwo cenzura
2 kurcze kur***
3 cholera cho****

kod ktory podalem wyzej dziala ale nie do konca gdyz zamienia mi tylko wulgaryzm na odpowiednie z najwiekszym id w bazie ... reszty nie zmienia :/
Majdan
Już wiem o co Ci chodzi.
Zamień to:
[php:1:1eee9ecb5b]<?php
while($cen = mysql_fetch_array($cen2)) {
$slowo[] = $cen['slowo'];
$zamien[] = $cen['zamien'];
}
?>[/php:1:1eee9ecb5b]
Jawor
dziala !! naprawde wielkie dzienki ...

PS: setny punkt pomocy biggrin.gif gratuluje biggrin.gif
Majdan
Nie ma za co! :wink:
PS. Dzięki.
cichy
i pomyśleć że ten pukcik bym zdobyłja gdybym odrazu podal swoje rozwiązanie zamiast wspierać Majdan'a winksmiley.jpg
hehe

Pozdro
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.