Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Usuwanie między znacznikami
Forum PHP.pl > Forum > Przedszkole
Ziels
Witam!

Mam problem z usuwaniem znaku końca lini (\n) spomiędzy okreslonych znaczników. Dokładniej chodzi o to że w zmiennej mam przechowywane:

  1. <?php
  2. $text="jakiś bardzo długi tekst w którym mają być wstawione <br> zamiast /n w wyniku końcowym [znacznik]a
  3. tutaj
  4. ma wycinać
  5. n[/znacznik]
  6. ?>


Da się to jakoś zrobić? strstr nie wchodzi w drogę bo za każdym razem "jakiś bardzo długi tekst" będzie inny. Nie mam pojęcia co do tego się nada - str_replace() jest złe również, ponieważ przy takim przetwarzaniu:
  1. <?php
  2. $str = preg_replace("#<!--c1--><div class='codetop'>KOD</div><div class='codemain'><!--ec1-->(.*?)<!--c2--></div><!--ec2-->#si", "efekt", $str);
  3. $str = str_replace('n', '', '[znacznik](.*?)[/znacznik]');
  4. ?>

$str będzie miało na końcu wartość "[znacznik](.*?)[/znacznik]"...
Kosmi
Jeżeli chodzi o samo usuwanie to trim(), rtrim(), ltrim() zależnie której potrzebujesz. Jeżeli chodzi o zamianę \n na <br> to nl2br().

Pozdrawiam
Ziels
Nie rozumiesz - jeśli wsadzę nl2br($text); to w znaczniku też zamieni - a nie powinno.

Chyba że to ja źle zrozumiałem - gdzie to pownienem wsadzić?


Poprostu - z formularza przekazuję dane przy pomocy zmiennej, i tam zamienia wszystkie /n na <br>. Mój problem to jak "pominąć" zamianę na obszarze:
[wywal \n]jakiś tekst w którym ma wycinać
\n[/wywal \n].

Jeśli istnieje funkcja taka jak strstr() ale zamiast argumentów liczbowych mógłbym podać początek i koniec znacznika byłoby to najlepsze rozwiązanie - ale podejrzewam że nie istnieje.
Kosmi
Jeżeli nie wiesz co będzie w ciągu $text czyli zakładam że nie wiesz też ile razy pojawi się [znacznik]. Proponuję więc takie rozwiązanie (łopatologiczne):

  1. <?php
  2. $tablica=explode("[znacznik]",$text);
  3. if(count($tablica)>1){
  4. for($i=1;$i<count($tablica);$i++){
  5. $tablica2=explode("[/znacznik]",$tablica[$i]);
  6. $tablica2[0]=trim($tablica2[0]);
  7. $tablica[$i]=implode("[/znacznik]",$tablica2);
  8. }
  9. $text_nowy=implode("[znacznik]",$tablica);
  10. }
  11. ?>


Sprawdziłem na przykładowym ciągu i działa jeżeli dobrze zrozumiałem o co chodzi smile.gif

Pozdrawiam
Ziels
Cytat(Kosmi @ 3.08.2006, 10:39 ) *
Jeżeli nie wiesz co będzie w ciągu $text czyli zakładam że nie wiesz też ile razy pojawi się [znacznik]. Proponuję więc takie rozwiązanie (łopatologiczne):

  1. <?php
  2. $tablica=explode("[znacznik]",$text);
  3. if(count($tablica)>1){
  4. for($i=1;$i<count($tablica);$i++){
  5. $tablica2=explode("[/znacznik]",$tablica[$i]);
  6. $tablica2[0]=trim($tablica2[0]);
  7. $tablica[$i]=implode("[/znacznik]",$tablica2);
  8. }
  9. $text_nowy=implode("[znacznik]",$tablica);
  10. }
  11. ?>


Sprawdziłem na przykładowym ciągu i działa jeżeli dobrze zrozumiałem o co chodzi smile.gif

Pozdrawiam


Działa prawie dobrze tongue.gif Wywala tylko pierwsze /n spomiędzy znaczników
Tu masz przykład - znaczniki po przejechaniu twoim kodem są zamieniane na <ul></ul>
Kosmi
No tak bo użyłem funkcji trim() a ona ucina tylko z końca i początku smile.gif

Zamień tę funkcję ( trim() ) na coś innego co usunie "\n" np.
  1. <?php
  2. $tablica2[0]=str_replace("n","",$tablica2[0]);
  3. ?>


Pozdrawiam
Ziels
Dzięki ogromne - jesteś wielki smile.gif

Jeszcze ostatnia kwestia - czy da się pobrać w php ze zmiennej linię zawierającą jakiś ciąg znaków?
Kosmi
Cytat(Ziels @ 3.08.2006, 12:00 ) *
Jeszcze ostatnia kwestia - czy da się pobrać w php ze zmiennej linię zawierającą jakiś ciąg znaków?


Podaj jakiś przykład żeby nie było nieporozumień smile.gif
Ziels
Przykładem będzie w pół przetworzony formularz - z <br> a bez reszty : )

  1. <?php
  2. $text='
  3. jakaś treść
  4. <br> ]code] chcę usunąć <br> sprzed znacznika, pobierając linię z "]code]" i używając str_replace()]/code]
  5. jakaś treść';
  6. ?>


"]code]" celowo - [code] forum zamieniało na swoje : P

EDIT:

Temat może być do kasacji - poradziłem sobie dodając (\n\[|\[) na początku wyrażenia w preg_replace
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.