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.

Kod: Zaznacz cały

$dane = "$imie";
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

Kod: Zaznacz cały

$dir = 'baza.txt';
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