Być może istnieje już taki temat, szukałem ale nic nie znalazłem, jeśli się mylę to proszę o naprostowanie.
Jak wygląda mój problem: mam zwykły formularz HTML, kodowany w utf-8, przesyłany do skryptu PHP. W skrypcie PHP zawartość pola textarea zapisuję w bazie danych MySQL. Co chciałbym uzyskać? Możliwość używania znaczników HTML w treści tego pola, z tym wyjątkiem, żeby tekst między <pre> a </pre> nie był potem przetwarzany na HTML, gdy chcę te dane z bazy wyciągnąć na stronę.
Używałem:
$data = htmlspecialchars_decode($result[0]); // result to dane wczytane, 0 - indeks pola z kodem HTML // i zawartość między <pre> i </pre> ponownie kodowałem '/<pre>(.+?)<\/pre>/', function ($matches) { }, $data);
Działało w miarę w porządku, problem jest taki, że jak dodam znak nowej linii między <pre> i </pre> to zawartość między tymi znacznikami jest zupełnie ignorowana. Kolejna kwestia, próbowałem używać funkcji trim po odczycie danych, aby usunąć nowe linie, i dopiero wtedy korzystać z preg_replace_callback, ale okazało się że trim w ogóle nie reaguje na wszelkie nowe linie, brak efektów, podglądałem źródło i kod jest taki jaki został zapisany do bazy danych (razem z nowymi liniami i wielokrotnymi spacjami).
Bardzo proszę kogoś obcykanego w kodowaniu znaków o pomoc, bardzo zależy mi na wytłumaczeniu które zrozumiem, albo przynajmniej będę w stanie do niego zadać jakieś pytania. Próbowałem używać str_replace przy zapisywaniu danych do bazy:
I bardzo mnie to zaskoczyło, bo okazało się że dane w bazie są widoczne razem z nowymi liniami i spacjami, ale na stronie już były w jednej linii. Teoretycznie było w porządku, usunęło mi też nowe linie i spacje z tekstu pomiędzy <pre> i </pre> przez co kod tam zawarty zlał się w jedną linię, co było niepożądane.
Krótkie wyjaśnienie, aby było wiadomo o co mi chodzi: piszę mini-bloga z artykułami w których będzie można zawrzeć kod HTML do formatowania tekstu, lecz chciałbym też aby kod HTML między <pre> i </pre> był ładnie wyświetlany na stronie.
Dziękuję serdecznie i pozdrawiam,
Dawid Zaroda (Quis)
------------------------
@EDIT
Dałem radę zrobić coś samemu, ale jest to raczej amatorszczyzna, chciałbym coś bardziej profesjonalnego

Wstawię kodzik dla innych, może się przyda, po wczytaniu danych:
$data = htmlspecialchars_decode($result[0], ENT_QUOTES | ENT_HTML5); $openpos = stripos($data, "<pre>"); $closepos = stripos($data, "</pre>", $openpos+4); while($openpos !== false and $closepos !== false) { $startOfCode = $openpos+5; $codeLength = $closepos-$openpos-5; $openpos = stripos($data, "<pre>", $closepos+5); $closepos = stripos($data, "</pre>", $closepos+5); }
Gdyby ktoś miał dla mnie ciekawszą propozycję, to jestem zainteresowany.
Pozdrawiam