Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Mały bbcode
Forum PHP.pl > Forum > Przedszkole
piotr485
Witam napisałem coś takiego:
  1. $wywalanie_znakow = str_replace("\n", "<br />", $wywalanie_znakow);
  2. $wywalanie_znakow = str_replace("\n\n", "<br /><br />", $wywalanie_znakow);


Ale niestety nie działa tak jak powinno - chciałbym aby jeden \n było jako <br />, dwa \n\n było jako <br /><br /> i wszystkie wiecej niz 2 \n\n tez byly zawsze dwa <br /><br />

Tylko nie wiem jak to napisac, zapewne przy pomocy preg_replace wyrazen regularnych, ale nie mam pojecia jak to rozgryzc - te wyrazenia za kazdym razem dla mnie czarna magia.
Pomoże ktos? Proszę!

Jaką komendą mogę sprawdzic jak wyglada moj kod zapisany w bazie tak aby wyswietlilo sie rowniez \n \r ?
piotrooo89
zrób sobie tablice z tych wartości.

  1. $wywalanie_znakow = str_replace(array("\n", "\n\n"), array("<br />", "<br /><br />"), wywalanie_znakow);
piotr485
  1. $wywalanie_znakow = str_replace(array("\n", "\n\n", "\n\n\n", "\n\n\n\n"), array("<br />", "<br /><br />", "<br /><br />", "<br /><br />"), $wywalanie_znakow);


To co piszesz nie działa sad.gif
piotrooo89
ale co Ci nie działa? co chcesz osiągnąć?
piotr485
Jeśli w zmiennej wystepuje \n to zamienic to na <br />
jesli wystepuje podwojnie kolo siebie (\n\n)to zamienic na <br /><br />
jesli wystepuje potrojnie to zamienic na <br /><br />
jesli wystepuje poczwornie kolo siebie "\n\n\n\n" to zamienic na <br /><br />

czyli gdy wystepuje kolo siebie dwa lub wiecej razy to zamienic na dwa br (<br /><br />)


Mephistofeles
Zamień kolejność, pewnie nie ma już \n\n bo jest <br>\n.
piotr485
zrobiłem tak:

  1. $wywalanie_znakow_o_nas = str_replace("\n\n\n\n\n", "<br /><br />", $wywalanie_znakow_o_nas);
  2. $wywalanie_znakow_o_nas = str_replace("\n\n\n\n", "<br /><br />", $wywalanie_znakow_o_nas);
  3. $wywalanie_znakow_o_nas = str_replace("\n\n\n", "<br /><br />", $wywalanie_znakow_o_nas);
  4. $wywalanie_znakow_o_nas = str_replace("\n\n", "<br /><br />", $wywalanie_znakow_o_nas);
  5. $wywalanie_znakow_o_nas = str_replace("\n", "<br />", $wywalanie_znakow_o_nas);


Ale to nic nie daje i tak niedziała

  1. $wywalanie_znakow_o_nas = str_replace(array("\n\n\n", "\n\n", "\n"), array("<br /><br />", "<br /><br />", "<br />"), $wywalanie_znakow_o_nas);


jak jest \n\n\n to wg tego zamieni mi na <br /><br /> a potem \n zamieni na <br /> i w rezultacie znowu otrzymam trzy BR

Po za tym co jesli ktos uzyje 100 nowych linii - mam sto linijek kodu napisac zeby to zrobic ? choc i tak ten sposob nie dziala... nie mam glowy
no_face
Panowie.

  1. $a= preg_replace(array("/\n{3,}/", "/\n\n/", "/\n/"), array('<br /><br />', '<br /><br />', '<br />'), $a);


do tego uczulenie na '\r\n', '\n' itd.
piotr485
Niestety również niedziała. Już po mału tracę nadzieję na możliwosc rozwiązania tego problemu
darko
To może tak:
  1. $s = "\n\n\ntest\n";
  2. $s = preg_replace(array("/\n{2,1000}/", "/\n{1}/"), array("<br/><br/>", "<br/>"), $s);
  3. echo $s;

?
no_face
Choc nie testowalem przykladu, dzialac powinien, byc moze problemem jest zrodlo danych wejsciowych. Jezeli wykonujesz to po przez formularz pod przewodnictwem windowsa powinno wystarczyc "\n", jezeli testujesz na pliku gdzie zmienna tekstowa jest zapisana w postaci wielolinijkowej zastosuj "\r\n".

PS Okresl w jaki sposob testujesz nasze rozwiazania.
Misiek92
Nie lepiej nl2br() - http://pl.php.net/manual/pl/function.nl2br.php ?
darko
Cytat(Misiek92 @ 11.01.2010, 23:16:21 ) *

Nie, ponieważ wtedy każdy znak nowej linii ("\n") zostanie zastąpiony "<br/>", a nie o to chodzi.

Ostatecznie powinno być coś takiego:

  1. $s = "\n\n\ntest\n";
  2. $ile = substr_count($s, "\n");
  3. $s = preg_replace(array("/\n{2,$ile}/", "/\n{1}/"), array("<br/><br/>", "<br/>"), $s);
  4. echo $s;
piotr485
Dlaczego mi to nie działa ?

  1. $s = "\n\r\n\r\n\r\n\r\n\rtest\n\r";
  2. $s = preg_replace(array('/\n\r{2,1000}/', "/\n\r{1}/"), array("<br/><br/>", "<br/>"), $s);
  3. echo $s;


Wyświetla się <br /><br /><br /><br /><br />test<br />
no_face
Jak juz to \r\n

a nie dziala poprawnie gdyz wielokrotnosc odwoluje sie do samego \r a nie Twojego \n\r

  1. $s = "\r\n\r\n\r\n\r\ntest\r\ntestw\r\n\r\n\r\n\r\ntest3";
  2. $s = preg_replace(array('/(\r\n){2,1000}/', "/(\r\n){1}/"), array("<br/><br/>", "<br/>"), $s);

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.