ďťż
Podstrony
|
telcocafeElo,napisałem takie cuś <?php $tekst = 'różowe kwiatki rosną na łące'; $cenzura =array('różowe', 'kwiatki', 'łące'); $ile = count($cenzura); echo 'System cenzurowanie tekstu <br />'; echo '<br /> Oto tekst bez cenzury <br />'; echo $tekst; echo '<br /> Tekst po ocenzurowaniu <br />'; for ($i=0; $i<$ile; $i++) { if (strstr($tekst, $cenzura[$i])); $dlugosc = strlen($cenzura[$i]); $tekst = str_replace($cenzura[$i], substr($cenzura[$i], 0, 2). '***'.substr($cenzura[$i], $dlugosc-1), $tekst); } echo $tekst; ?> Jak widać po wystąpieniu w tekście słowa z tablicy $cenzura następuje jego zamiana na pierwsze 2 znaki tegoż słowa, następnie 3 gwiazdki i ostatnia litera. Jednak np dla wyrazu 'łące' 3 gwiazdki to już za dużo, jak zrobić aby wyświetlało gwiazdki wg. wzoru długość - 3; np. łą*e - łące, kw****i - kwiatki. Oraz pytanie nr 2. Czy jest inna funkcja niż strstr(), która nie będzie zważać na wielkość liter? Z góry dzieki za odpowiedzi. str_pad('', $dlugosc - 3, '*') PS Czemu służy to?if (strstr($tekst, $cenzura[$i])); Odnośnie case sensitive, to używaj funkcji stristr i str_ireplace, ale w Twoim wypadku to trochę zepsuje wynik. Tutaj zmieniony Twój kod: <?php $tekst = 'Różowe kwiatki rosną na łące'; $cenzura =array('różowe', 'kwiatki', 'łące'); $ile = count($cenzura); echo 'System cenzurowanie tekstu <br />'; echo '<br /> Oto tekst bez cenzury <br />'; echo $tekst; echo '<br /> Tekst po ocenzurowaniu <br />'; for ($i=0; $i<$ile; $i++) { if (stristr($tekst, $cenzura[$i])) { $dlugosc = mb_strlen($cenzura[$i], 'utf-8'); $tekst = str_ireplace($cenzura[$i], mb_substr($cenzura[$i], 0, 2, 'utf-8').str_pad('', $dlugosc - 3, '*').mb_substr($cenzura[$i], $dlugosc-1, 1, 'utf-8'), $tekst); } } echo $tekst; I wynik: System cenzurowanie tekstu Oto tekst bez cenzury Różowe kwiatki rosną na łące Tekst po ocenzurowaniu ró***e kw****i rosną na łą*e Użytkownik andrzej_aa edytował ten post 05 maj 2010, 21:00 w sumie działa, dzęki. |
|||
Sitedesign by AltusUmbrae. |