Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] preg_replace bład składni
Forum PHP.pl > Forum > PHP
Piro
Witam
Mam taki mały problem z formularzem do komentarzy który piszę, a mianowicie używam funkcji nl2br() która zamienia mi wszystkie nowe linie na <br />. I tutaj jest właśnie problem nie wiem dlaczego ale po wczytaniu tekstu z bazy danych wypisuje mi w tekście <br />, a nie znak nowej linii. Do zamiany <br /> na <br/> (bez spacji, chociaż nie miałem pojęcia że to coś może dać) użyłem funckji "preg_replace" która pobiera sobie jako argument tekst do zamiany i co na co ma być zamienione. Ale tutaj jest błąd:
  1. <?php
  2. $tresc = nl2br($tresc);
  3. $tresc = htmlspecialchars($tresc);
  4. $tresc = preg_replace("<br />","<br/>",$tresc);
  5. ?>


Po wyciągnięciu tego z bazy danych wszystkie znaczniki które sobie przez bbcode wprowadziłem działają :
  1. <?php
  2. $tresc = preg_replace("#[i](.*?)#si",'<i>1</i>',$tresc);
  3. $tresc = preg_replace("#[u](.*?)#si",'<u>1</u>',$tresc);
  4. $tresc = preg_replace("#[url=(http.*?)](.*?)#si", "<A HREF=\"1\" TARGET=\"_blank\">2</A>", $tresc);
  5. ?>


<br/> działa ale straszne rzeczy mi "wypluwa" tz. zamiast przejść do nowej linii to wyświetla znak "<" przechodzi do nowej linii i potem znak ">". Myślałem że wystarczy usunąć któryś z "<" w preg_replace ale to nic nie pomogło, a wyskoczył tylko błąd. Gdyby ktoś umiał pomóc do proszę odpisać.

Pozdrawiam,
Piro
byqu
Wszystkie <br /> zostają zamienione na
Kod
&lt;br /&gt;

, gdyż wywołujesz najpierw nl2br, który zamienia "entery" na <br />, a potem htmlspecialchars zamieniający między innymi takie znaki jak: < , > na encje.
To:
  1. <?php
  2. $tresc = nl2br($tresc);
  3. $tresc = htmlspecialchars($tresc);
  4. $tresc = preg_replace("<br />","<br/>",$tresc);
  5. ?>

Zastąp tym:
  1. <?php
  2. $tresc = htmlspecialchars($tresc);
  3. $tresc = nl2br($tresc);
  4. ?>


BTW. Widzę, że mieszasz xHTMLa z HTMLem - znaczniki: <i>, <u> nie znajdują się w specyfikacji xHTMLa.
@Down: ale <br /> to element xHTMLa -w HTMLu jest <br>.
Piro
Dzięki za pomoc. Byłem trochę głupi że nie zobaczyłem.


PS nigdzie nie napisałem że <u> to xHTML...
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.