Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php] Usuwanie między znacznikami
Ziels
post
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
 
Start new topic
Odpowiedzi (1 - 8)
Kosmi
post
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
Go to the top of the page
+Quote Post
Ziels
post
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
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam
Go to the top of the page
+Quote Post
Ziels
post
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 (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)

Pozdrawiam


Działa prawie dobrze (IMG:http://forum.php.pl/style_emoticons/default/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
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 (IMG:http://forum.php.pl/style_emoticons/default/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
Go to the top of the page
+Quote Post
Ziels
post
Post #7





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

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


Dzięki ogromne - jesteś wielki (IMG:http://forum.php.pl/style_emoticons/default/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
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ń (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post
Ziels
post
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
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 21:34