Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] str_replace
Forum PHP.pl > Forum > Przedszkole
Edpl
Witam, chcę w swoim kodzie zrobić coś na styl wikipedii aby łatwo było tworzyć linki, jak poprawnie napisać taki kod. Jedyne co dotychczas stworzyłem nie działa:
  1. <?php
  2. $text=str_replace('[[%|','<a href=index.php?page=search&key=%>',$text);
  3. $text=str_replace('|%]]','%</a>',$text);
  4. ?>


Z góry dziękuję i pozdrawiam.
kaapa
Twój kod działa smile.gif sprawdzałem. Możesz jeszcze zrobić coś takiego
  1. <?php
  2. $text = "[[%| tekst |%]]";
  3.  
  4. $do = array('[[%|', '|%]]');
  5. $na = array('<a href=index.php?page=search&key=%>', '</a>');
  6.  
  7. $text =str_replace($do,$na,$text);
  8.  
  9. print("$text");
  10. ?>


Pozdrawiam smile.gif
Edpl
Nie wiem czy się zrozumieliśymy... link powinien wyglądać tak [[tekst|wyswietlany_tekst]]
nospor
  1. <?php
  2. $text = "[[%| tekst |%]]";
  3.  
  4. $pattern = '/[[%| (.*?) |%]]/';
  5. $replace = '<a href="index.php?page=search&key=1">1</a>';
  6. $text =preg_replace($pattern,$replace,$text);
  7.  
  8. print($text);
  9. ?>

Dostosuj sobie link jak chcesz
kaapa
Coś takiego ?
  1. <?php
  2. $text = "[[http://www.wp.pl| wp ]]";
  3.  
  4. $do = array('[[', '|', ']]');
  5. $na = array('<a href="', '">', '</a>');
  6.  
  7. $text =str_replace($do,$na,$text);
  8.  
  9. print("$text");
  10. ?>


;]
Edpl
Dziękuję, działa smile.gif

Mi chodziło bardziej o to:
  1. <?php
  2. $text = "[[tekst|tekstowy]]";
  3. $pattern = '/[[(.*?)|(.*?)]]/';
  4. $replace = '<a href="index.php?page=search&key=1">2</a>';
  5. $text =preg_replace($pattern,$replace,$text);
  6. print($text);
  7. ?>

a z tym \1 i \2 to prawie tak samo jak w skryptach bashowych.... smile.gif
Hmm pomyliłem z SQL i jako dowolny ciąg znaków wstawiłem % i stąd całe nieporozumienie.
I mam tylko jedno pytanie dlaczego (.*?) ?
Korzystając z tego:
# . - dopasowanie do każdego znaku oprócz nowego wiersza
# | - start alternatywnych rozgałęzień (jak OR)
# ( - początek ciagu
# ) - koniec ciągu
# * - powtórzenie zero lub wiecej razy
?
bo jedyne co by mi nie pasowało to znak zapytania, ale nie wiem, czy dobrze kombinuję.


@kaapa:
Twój sposób może też dobry i prostszy, ale czy przypadkiem jeśli w filtrowanym tekście pojawie się np "luźny" znak | to czy go nie zamieni?
nospor
powinienes miec tak:
  1. <?php
  2. $text = "[[tekst|tekstowy]]";
  3. $pattern = '/[[(.*?)|(.*?)]]/';
  4. $replace = '<a href="index.php?page=search&key=1">2</a>';
  5. $text =preg_replace($pattern,$replace,$text);
  6. print($text);
  7. ?>


A .*? to dowolny znak wiele lub zero razy. z jakiegos powodu .* nie dziala smile.gif
Edpl
Tak mam, źle wkleiłem (nie wiem jakim cudem ale nvm winksmiley.jpg )
Dzięki za pomoc i wyjaśnienie smile.gif
kaapa
Tak dokładnie, zakładając, że w środku będzie zamieniany znak zrobi się bałagan trochę. Skrypt używający wyrażeń regularnych był lepszy.
Pozdrawiam.
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.