Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Przekształcanie zawartości tagu HTML w inny tag HTML
Forum PHP.pl > Forum > Przedszkole
Konop857
Witam

Potrzebuję zrobić coś takiego, że w bazie danych wpisuję tagi HTML a następnie kodem PHP przekształcam to w linki.

  1. <auto>Audi A4</auto>
  2. <motocykl>Ducati Monster</motocykl>


Rzecz w tym że spacje trzeba zamienić na _
Kombinowałem w ten sposób aczkolwiek nic się dzieje, spacja pozostaje spacją natomiast gdy zamiast \\1 jest jakaś zmienna wszystko działa jak należy.

  1. echo preg_replace("#<motocykl>(.*?)<\/motocykl>#si", str_replace(" ", "_", "\\1"), $Template['FinalForm']);


Ma ktoś pomysł jak to rozwiązać ?

Pozdrawiam
404
str_replace jako trzeci argument przyjmuje ciąg znaków, na którym chcesz zrobić podmianę. Dlaczego przekazujesz tam \\1?
SmokAnalog
Zrobiłem Ci gotowca, ale co tam.

  1. // tutaj ustawiasz sobie co ma się pojawić w danym tagu; klucz to nazwa tagu, a funkcja zwraca wynik zamiany
  2. $tags = array(
  3. 'motocykl' => function($entry) {
  4. return 'http://moto.com/' . str_replace(' ', '_', $entry) . '/';
  5. },
  6. 'auto' => function($entry) {
  7. return 'http://auto.com/' . str_replace(' ', '_', $entry) . '/';
  8. }
  9. );
  10.  
  11. // przykładowa treść, gdzie będziemy zamieniać
  12. $content = '
  13. <auto>Fiat 126P</auto>
  14. <motocykl>Harley-Davidson</motocykl>
  15. <myszka>Miki</myszka>
  16. ';
  17.  
  18. // a tutaj już cała magia, nic tu nie zmieniaj
  19. $content = preg_replace_callback(
  20. '#<(\w+)>([^<]*)</\1>#',
  21. function($matches) use ($tags) {
  22. list($match, $tag, $content) = $matches;
  23.  
  24. if (isset($tags[$tag])) {
  25. return sprintf('<%1$s>%2$s</%1$s>', $tag, $tags[$tag]($content));
  26. }
  27.  
  28. return $match;
  29. },
  30. $content
  31. );


Czyli musisz dostosować $tags do siebie. W przyszłości możesz wygodnie dodawać kolejne tagi. Jeśli któregoś nie ma, to nic nie zostanie w nim zamienione, tak jak w przykładzie z tagiem <myszka>.
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.