Strona 1 z 1
Cenzor wyrazów na stronie- problem
: śr mar 17, 2010 10:05 pm
autor: kaiba
Cześć. Mam problem. Nie potrafie odpowiednio przerobić cenzora, co jest na portalu pod mój skrypt. Czy mogę prosić was o pomoc. Będę bardzo wdzięczny, oto mój kod:
Kod: Zaznacz cały
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Kaiba</title>
<link rel="stylesheet" type="text/css" href="styl.css" />
<meta http-equiv="Refresh" content="20">
</head>
Nick <font color="white">.................................. </font>Wiadomość
<?php
$dir = 'baza.txt'; // tworzymy plik baza.txt
if(!file_exists('baza.txt')) // jeśli plik istnieje to nie tworzymy
{
fopen('baza.txt', 'w');
}
if(strlen($wpis)>100) // jeśli wpis jest dłuższy niż 100 znaków nie zostanie dodany
{
exit;
}
if(strlen($imie)>10) // jeśli wpis jest dłuższy niż 30 znaków nie zostanie dodany
{
die('Przykro mi twój wpis nie został dodany');
}
$data = date("H:i:s"); // co równa sie co
$imie = trim($_POST['imie']);
$wpis = trim($_POST['wpis']);
$dane = "$imie";
include('plik.php');
if (empty($imie)) // samo imie można wysłać
{
echo "<form action=\"\" method=\"POST\"><input type=\"textareas\" name=\"imie\" ><input type=\"textareas\" size=\"50\" name=\"wpis\"><input type=\"submit\" value=\"Wyślij\" class=\"button\">";
}
else
{
$wiadomosc = "$data - $imie </br>"; // zapis wszystkiego
$zapisz_do ='baza.txt';
$zapisz = fopen($zapisz_do, "a");
flock($zapisz, 2);
fwrite($zapisz, $wiadomosc);
flock($zapisz, 3);
fclose($zapisz);
echo "<form action=\"\" method=\"POST\"><input type=\"text\" color=\"#FFCC33\" name=\"imie\" ><input type=\"textareas\" size=\"50\" name=\"wpis\"><input type=\"submit\" value=\"Wyślij\" class=\"button\">";
}
$fp = fopen("baza.txt", "r");
$wpis = fread($fp, 10);
echo "<html>
<br><br>
<body style='width:800px; margin:auto;'>
<div style='width:250px; height:500px; float:left; background:#ABC;'> " . file_get_contents('baza.txt') . "</div>
<div style='width:250px; height:500px; float:left; background:#DF1111;'> " . file_get_contents('wpis.txt') . "</div>
</body>
</html>";
?>
Plik cenzura.txt utworzyłem, dałem tam przykładowe wulgarne słowo. Czy możecie mi połączyć cenzora z moim skryptem?
Pozdrawiam.
Re: Cenzor wyrazów na stronie- problem
: czw mar 18, 2010 10:04 am
autor: Vaticinator
Hej. Po pierwsze, kilka uwag:
Kod: Zaznacz cały
$dir = 'baza.txt'; // tworzymy plik baza.txt
W ten sposób nie tworzysz pliku, tylko zapisujesz jego nazwę. Równie dobrze mógłbyś tę linijkę usunąć, bo w reszcie kodu nie używasz tej zmiennej, tylko wpisujesz całą nazwę pliku gdzie trzeba.
Kod: Zaznacz cały
if(strlen($imie)>10) // jeśli wpis jest dłuższy niż 30 znaków nie zostanie dodany
Jeśli wpis jest dłuższy niż
10 znaków nie zostanie dodany.
Tej zmiennej też nigdzie nie wykorzystujesz, więc można jej przypisanie sobie darować.
No i co się kryje w pliku "wpis.txt"?
A wracając do zapytania, to dobrze by było wiedzieć, czy chodzi Ci o to, żeby skrypt podmienił przekleństwa na jakieś !@#$!$%, czy wystarczy jak wyskoczy komunikat, że nie można używać przekleństw i formularz pokaże się na nowo?
Re: Cenzor wyrazów na stronie- problem
: czw mar 18, 2010 4:47 pm
autor: kaiba
w ten sposób tworze pusty plik to po primo, po drugie primo komentarz mam błędny owszem, ale czy to w czymś przeszkadza i po trzecie primo, tamta zmienna jest do skasowania, ale nadal mi nie przeszkadza
A do pytanie, to chce to tak, że jak ktoś wyśle jakiej brzydkie słowo, w pliku wpis.txt od razu zamienia je na ***
albo zamienia na gwiazdki gdy sie pokazuje na index.php
Re: Cenzor wyrazów na stronie- problem
: czw mar 18, 2010 8:06 pm
autor: Vaticinator
Jeżeli w ten sposób tworzysz pusty plik to gratuluję.
Resztę uwag radzę wziąć do serca. Ładny i zadbany kod zaoszczędzi Ci pracy w przyszłości... chyba, że to tylko chwilowa przygoda z PHP. Naprawdę warto wyrabiać sobie dobre nawyki.
A teraz rozwiązanie Twojego problemu. Kawa na ławę.
W pliku cenzor.txt każde słowo napisz w osobnej linijce, a potem wykorzystaj dla swojego tekstu poniższą funkcję:
Kod: Zaznacz cały
function cenzor($tekst){
$do_ocenzurowania = file("cenzor.txt");
return str_ireplace($do_ocenzurowania, "***", $tekst);
}
I na przyszłość, więcej szacunku. Mam nadzieję, że pomogłem.
Re: Cenzor wyrazów na stronie- problem
: czw mar 18, 2010 8:28 pm
autor: kaiba
no ale ja seryjnie tak tworze plik i sie tworzy xD
zamiast $tekst chyba $wpis
dopiero zaczynam moją przygodę z php, więc wiesz... nie mam jeszcze dobrych nawyków
Edit:
Nie działa, oto mój kod:
Kod: Zaznacz cały
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Kaiba</title>
<link rel="stylesheet" type="text/css" href="styl.css" />
<meta http-equiv="Refresh" content="20">
</head>
Nick <font color="white">.................................. </font>Wiadomość
<?php
function cenzor($wpis){
$do_ocenzurowania = file("cenzor.txt");
return str_replace($do_ocenzurowania, "***", $wpis);
}
$dir = 'baza.txt'; // tworzymy plik baza.txt
if(!file_exists('baza.txt')) // jeśli plik istnieje to nie tworzymy
{
fopen('baza.txt', 'w');
}
if(strlen($wpis)>100) // jeśli wpis jest dłuższy niż 100 znaków nie zostanie dodany
{
exit;
}
if(strlen($imie)>10) // jeśli wpis jest dłuższy niż 10 znaków nie zostanie dodany
{
die('Przykro mi twój wpis nie został dodany');
}
$data = date("H:i:s"); // co równa sie co
$imie = trim($_POST['imie']);
$wpis = trim($_POST['wpis']);
include('plik.php');
if (empty($imie)) // samo imie można wysłać
{
echo "<form action=\"\" method=\"POST\"><input type=\"textareas\" name=\"imie\" ><input type=\"textareas\" size=\"50\" name=\"wpis\"><input type=\"submit\" value=\"Wyślij\" class=\"button\">";
}
else
{
$wiadomosc = "$data - $imie </br>"; // zapis wszystkiego
$zapisz_do ='baza.txt';
$zapisz = fopen($zapisz_do, "a");
flock($zapisz, 2);
fwrite($zapisz, $wiadomosc);
flock($zapisz, 3);
fclose($zapisz);
echo "<form action=\"\" method=\"POST\"><input type=\"text\" color=\"#FFCC33\" name=\"imie\" ><input type=\"textareas\" size=\"50\" name=\"wpis\"><input type=\"submit\" value=\"Wyślij\" class=\"button\">";
}
$fp = fopen("baza.txt", "r");
$wpis = fread($fp, 10);
echo "<html>
<br><br>
<body style='width:800px; margin:auto;'>
<div style='width:250px; height:500px; float:left; background:#ABC;'> " . file_get_contents('baza.txt') . "</div>
<div style='width:250px; height:500px; float:left; background:#DF1111;'> " . file_get_contents('wpis.txt') . "</div>
</body>
</html>";
?>
I w cenzura jest jeden wyraz. (kur**) Oczywiście bez gwiazdek

Co jest nie tak?
Pozdro.
Re: Cenzor wyrazów na stronie- problem
: czw mar 18, 2010 9:07 pm
autor: Vaticinator
Podaną funkcję trzeba jeszcze wywołać.
Np w tym miejscu:
Kod: Zaznacz cały
<div style='width:250px; height:500px; float:left; background:#DF1111;'> " . cenzor(file_get_contents('wpis.txt')) . "</div>
</body>
</html>";
Re: Cenzor wyrazów na stronie- problem
: sob mar 27, 2010 10:34 pm
autor: kaiba
cześć modyfikowałem skrypty i cenzura zaś nie działa
index.php
Kod: Zaznacz cały
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Kaiba</title>
<link rel="stylesheet" type="text/css" href="styl.css" />
<meta http-equiv="Refresh" content="20">
</head>
Nick <font color="white">.................................. </font>Wiadomość
<?php
function cenzor($wpis){
$do_ocenzurowania = file("cenzura.txt");
return str_replace($do_ocenzurowania, "***", $wpis);
}
if(strlen($wpis)>100) // jeśli wpis jest dłuższy niż 100 znaków nie zostanie dodany
{
exit;
}
if(strlen($imie)>10) // jeśli wpis jest dłuższy niż 10 znaków nie zostanie dodany
{
die('Przykro mi twój wpis nie został dodany');
}
$data = date("H:i:s"); // co równa sie co
$imie = trim($_POST['imie']);
$wpis = trim($_POST['wpis']);
include('shoutbox/wiadomosc.php');
include('shoutbox/imie.php');
$fp = fopen("baza/wiadomosc.txt", "r");
$wpis = fread($fp, 10);
echo "<html>
<br><br>
<body style='width:800px; margin:auto;'>
<div style='width:250px; height:500px; float:left; background:#ABC;'> " . file_get_contents('baza/nick.txt') . "</div>
<div style='width:250px; height:500px; float:left; background:#ABC;'> " . cenzor(file_get_contents('baza/wiadomosc.txt')). "</div>
</body>
</html>";
?>
wiadomosc.php
Kod: Zaznacz cały
<?php
$wpis = trim($_POST['wpis']);
$dir = 'baza/wiadomosc.txt';
if(!file_exists('baza/wiadomosc.txt'))
{
fopen('baza/wiadomosc.txt', 'w');
}
if (empty($wpis))
{
echo "";
}
else
{
$wpis = "$wpis <br />";
$zapisz_do ='baza/wiadomosc.txt';
$zapisz = fopen($zapisz_do, "a");
flock($zapisz, 2);
fwrite($zapisz, $wpis);
flock($zapisz, 3);
fclose($zapisz);
echo "";
}
?>
Czekam na odp. Pozdro.
Re: Cenzor wyrazów na stronie- problem
: ndz mar 28, 2010 4:23 pm
autor: Vaticinator
Ok, teraz będzie poprawnie.
Podmień kod funkcji na taki:
Kod: Zaznacz cały
function cenzor($wpis){
$do_ocenzurowania = file("cenzura.txt", FILE_SKIP_EMPTY_LINES);
for($i=0; $i<count($do_ocenzurowania); $i++){
$do_ocenzurowania["$i"] = trim($do_ocenzurowania["$i"]);
}
return str_ireplace($do_ocenzurowania, "***", $wpis);
}
A na czym polegał błąd...
Funkcja
file() zapisuje w tablicy kolejne linie pliku, ale wraz ze znakami końca wiersza (których nie widać). Funkcją
trim() usuwamy te znaki. Dodatkowo, do funkcji
file(), dopisujemy flagę
FILE_IGNORE_NEW_LINES, która swoją nazwą wyjaśnia dobrze działanie. I ostatnia rzecz, to zamiast funkcji
replace() używamy
ireplace(), żeby cenzura nie brała pod uwagę wielkości znaków. Powinno działać. Daj znać.
Re: Cenzor wyrazów na stronie- problem
: pn mar 29, 2010 12:46 pm
autor: kaiba
działa thx