Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [php] str_replace
Edpl
post 13.04.2007, 19:09:21
Post #1





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.05.2006

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


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.


--------------------
hardware: HP Compaq 6720s
software: ArchLinux, 2.6.29, KDE 4.3 beta 2, Kate
Go to the top of the page
+Quote Post
kaapa
post 13.04.2007, 20:48:41
Post #2





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.04.2007

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


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
Go to the top of the page
+Quote Post
Edpl
post 13.04.2007, 20:58:28
Post #3





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.05.2006

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


Nie wiem czy się zrozumieliśymy... link powinien wyglądać tak [[tekst|wyswietlany_tekst]]


--------------------
hardware: HP Compaq 6720s
software: ArchLinux, 2.6.29, KDE 4.3 beta 2, Kate
Go to the top of the page
+Quote Post
nospor
post 13.04.2007, 21:02:20
Post #4





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




  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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
kaapa
post 13.04.2007, 21:04:52
Post #5





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.04.2007

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


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


;]
Go to the top of the page
+Quote Post
Edpl
post 13.04.2007, 21:21:55
Post #6





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.05.2006

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


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?

Ten post edytował Edpl 13.04.2007, 21:25:13


--------------------
hardware: HP Compaq 6720s
software: ArchLinux, 2.6.29, KDE 4.3 beta 2, Kate
Go to the top of the page
+Quote Post
nospor
post 13.04.2007, 21:28:55
Post #7





Grupa: Moderatorzy
Postów: 36 557
Pomógł: 6315
Dołączył: 27.12.2004




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


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
Edpl
post 13.04.2007, 21:39:16
Post #8





Grupa: Zarejestrowani
Postów: 20
Pomógł: 0
Dołączył: 6.05.2006

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


Tak mam, źle wkleiłem (nie wiem jakim cudem ale nvm winksmiley.jpg )
Dzięki za pomoc i wyjaśnienie smile.gif


--------------------
hardware: HP Compaq 6720s
software: ArchLinux, 2.6.29, KDE 4.3 beta 2, Kate
Go to the top of the page
+Quote Post
kaapa
post 14.04.2007, 07:18:22
Post #9





Grupa: Zarejestrowani
Postów: 9
Pomógł: 0
Dołączył: 13.04.2007

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


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.
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: 14.08.2025 - 02:35