Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] Usuwanie między znacznikami
Ziels
post 2.08.2006, 20:39:45
Post #1





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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]"...

Ten post edytował Ziels 3.08.2006, 11:38:03
Go to the top of the page
+Quote Post
Kosmi
post 3.08.2006, 07:14:20
Post #2





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
Ziels
post 3.08.2006, 08:39:20
Post #3





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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.

Ten post edytował Ziels 3.08.2006, 09:29:04
Go to the top of the page
+Quote Post
Kosmi
post 3.08.2006, 09:39:13
Post #4





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
Ziels
post 3.08.2006, 10:00:23
Post #5





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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>
Go to the top of the page
+Quote Post
Kosmi
post 3.08.2006, 10:44:50
Post #6





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
Ziels
post 3.08.2006, 11:00:23
Post #7





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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?
Go to the top of the page
+Quote Post
Kosmi
post 3.08.2006, 11:10:58
Post #8





Grupa: Zarejestrowani
Postów: 23
Pomógł: 0
Dołączył: 24.07.2006

Ostrzeżenie: (0%)
-----


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


--------------------
Elektrotechnika z Informatyką Techniczną. Studia w Lesznie!
Go to the top of the page
+Quote Post
Ziels
post 3.08.2006, 14:48:17
Post #9





Grupa: Zarejestrowani
Postów: 235
Pomógł: 2
Dołączył: 30.06.2006

Ostrzeżenie: (0%)
-----


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

Ten post edytował Ziels 3.08.2006, 15:01:35
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 12.07.2025 - 10:08