Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zastepowanie stringa zawartego miedzy znakami
Forum PHP.pl > Forum > Przedszkole
grubas
tak jak w temacie, czyli poiedzmy ze mam string "czesc [!] jestem fajny ale nie potrafie [exclamation.gif] tego zrobic" i czy mozna zastapic te znaki powmiedzy [!] a [exclamation.gif] czymkolwiek innym, to troche jak bbcode a wlasciwie calkiem tak ale probowalem tak dzialac jak tam i cos nie tak, jakis inny sposob, jakies magiczne funkcje? szukalem ale nic ciekawego nie widzialem, moze zle patrzylem :/
Mary$
  1. <?
  2. /* SKRYPT PODMIENIAJĄCY CIĄG ZNAKÓW */
  3.  
  4. $string = 'czesc [!] jestem fajny ale nie potrafie [!!] tego zrobic'; //ciąg znaków
  5. $rep_txt = 'jakiś text'; //tekst, którym roztanie zastąpiony text z pomiędzy znaczników
  6.  
  7. $pos1 = strpos($string,'[!]'); //pozycja "[!]" w stringu
  8. $pos2 = strpos($string,'[!!]'); // pozycja "[!!]" w stringu
  9. $len = $pos2 - $pos1; //długość tekstu do podmiany (zawartego pomiędzy znacznikami)
  10.  
  11. $val = substr($string,$pos1+3,$len-3); //tekst do podmiany 
  12. $res = str_replace($val,$rep_txt,$string);//podmiana tekstu z pomiędzy znaczników na tekst z $rep_txt
  13.  
  14. Echo $res;
  15. ?>

Jak widzisz masz tam kod
  1. <?php
  2. $val = substr($string,$pos1+3,$len-3);
  3. ?>

zawiera on "+3" oraz "-3" ze względu na to, że Twój znacznik "[!]" ma trzy znaki, a funkcji strpos()" title="Zobacz w manualu PHP" target="_manual podaje pozycję pierwszego znaku, czyli "[". Będziesz musiał sobie to pozmieniać w zależności od długości znaczników.

Efekt końcowy
Cytat
czesc [!]jakiś text[exclamation.gif] tego zrobic


Ty zapewne będziesz potrzebował funkcji, więc po prostu wstawisz sobie do tej funkcji odpowiednią ilość takich procedur, a jako parametr podasz stringa, którego chcesz edytować smile.gif
siemakuba
@Mary$: chęci masz z pewnością dobre, ale twój kod można ograniczyć do jednej linii:
  1. <?php
  2. $string = 'czesc [!] jestem fajny ale nie potrafie [!!] tego zrobic';
  3. $string = str_replace(array('[!]', '[!!]'), array('jeden wykrzyknik', 'dwa wykrzykniki'), $string);
  4. ?>


str_replace" title="Zobacz w manualu PHP" target="_manual, preg_replace" title="Zobacz w manualu PHP" target="_manual

pozdr.
Mary$
@siemakuba: tylko, że twój kod zamienia wykrzykniki na coś innego, a mój zamienia to, co jest między nimi. Czy ja coś źle zrozumiałem? Moży tylko to, że efekt końcowy powinien być bez wykrzykników, ale to sie da skorygować
siemakuba
Cytat(Mary$ @ 20.02.2007, 13:19:37 ) *
@siemakuba: tylko, że twój kod zamienia wykrzykniki na coś innego,


Prawda, mea culpa. nie zagłębiłem się... eh.

pozdr.
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.