Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP, wyr. reg.] "Podświetlenie" wersów z tekstu
Forum PHP.pl > Forum > PHP
Blackhole
Cześć.
Mam sobie w zmiennej tekst zawierający w sobie liczby, określające nr wersu. Np.:
  1. 1 To jest pierwszy wers, 2 a to już drugi. Zaraz będzie trzeci. 3 O już się pojawił. Mogę tak więcej, ale może na czwartym wystarczy. 4 A więc ten będzie ostatni.
Chciałbym teraz zrobić tak, że mając podany przedział liczb w 2 zmiennych np. $start=2 i $end=3, wersy od 2 do 3 powinny być jakoś podświetlone.
Próbowałem tak:
  1. <?php
  2. $tekst = preg_replace("#(".$start.") #",\n<span class=\"t_mark\">1 ", $tekst);
  3. $tekst = preg_replace("#(".($end+1).") #",\n</span>1 ", $tekst);
  4. ?>
lecz nie działa poprawnie. Gdy podam $start=1, a tekst zawiera wers np. o numerze 11, to ten 11 też się podświetla blinksmiley.gif Proszę o pomoc.

--- edit ---

Wersja:
  1. <?php
  2. $tekst = preg_replace("#[^0-9](".$start.") #",\n<span class=\"t_mark\">1 ", $tekst);
  3. $tekst = preg_replace("# (".($end+1).")#","</span>\n 1 ", $tekst);
  4. ?>
działa już dość dobrze. Jednak w tekście mogą się pojawiać znaczniki <h3> i jeśli taki element będzie w wersach wchodzących w skład podświetlonego fragmentu, to podświetlenie kończy się przed tym znacznikiem. Jak to obejść?
Shili
Kończy się? U mnie się nie kończy, tylko podświetlenie idzie sobie do tego miejsca, w którym miało się kończyć.
Swoją drogą - proponuję robić podświetlenie divem, jeśli przypuszczasz, że będą tam inne znaczniki, divowi wystarczy dać display: inline, żeby się wizualnie zachowywał jak span, ale walidator za to nie zwróci błędu.
Blackhole
Dałem DIV i styl "display: inline;", ale nie pomogło blinksmiley.gif
U mnie też tylko podświetlenie kończy się zbyt wcześnie.
Shili
Podaj mi dokładnie Twój problematyczny tekst, jeśli możesz.
Blackhole
http://jezusimarlena.ovh.org/t/index.php?p...p;ms=3&me=6
Zmienne GET ms i me to odpowiedniki $start i $end.
Shili
Prześledź sobie kod wygenerowanej strony - divem obejmuje tak jak powinno, problem nie leży w wyrażeniu regularnym winksmiley.jpg

Spróbuj dodać nie tylko elementowi .E_mark tło, ale również jego elementom podrzędnym.
Blackhole
Tak. Wyrażenie regularne jest dobre. Problem chyba w tym, że po </h3> mam w tekście znacznik <p> i potem znacznik zamykający podświetlenie tekstu jest wewnątrz tego paragrafu. A przecież znaczniki nie mogą się zachodzić na siebie.
Chyba będę musiał dodatkowy kod PHP napisać.
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.