Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP][BBCode] Zamiana linku bbcode na php
Forum PHP.pl > Forum > Przedszkole
Xardas93
Witam

Wiem, że temat był już poruszany i że odpowiadano na niego, jednak żadna odpowiedź nie pomogła mi rozwiązać problemu. Chodzi najpewniej o skomplikowany link, który muszę zamienić.

Forum wysyła treść postów do bazy danych. Chcę, żeby treści niektórych postów wyświetlały się na stronie. Poradziłem sobie ze wszystkimi kodami, za wyjątkiem jednego: url.

Cytat
[url=http://nazwastrony.pl/forum/viewtopic.php?f=151&t=1955:1xlfjr8l]TU TREŚĆ WYŚWIETLANA, KLIKALNY LINK[/url:1xlfjr8l]


Próbowałem stosować funkcję preg_replace, ale jestem amatorem i niestety nie potrafię sobie sam z tym poradzić. Chodzi rzecz jasna o to, aby na stronie w php link wyświetlał się prawidłowo. Widoczne ma być: TU TREŚĆ WYŚWIETLANA, KLIKALNY LINK, zaś odsyłać ma do strony: http://nazwastrony.pl/wyswietl.php?p=1955 (tutaj wartość parametru p jest równa wartości t z linku).

Z góry dziękuję za pomoc.
buliq
Po co masz w tagu :1xlfjr8l questionmark.gif?
gothye
Cytat(buliq @ 5.07.2013, 15:31:42 ) *
Po co masz w tagu :1xlfjr8l questionmark.gif?



to jest UID dla tagów BBCode ,zapewne forum oparte o phpbb
Xardas93
Dokładnie tak, jak mówi gotye. Dodaje mi coś takiego do tagów. Forum phpbb.
_Borys_
Czy chcesz link wpisać w tagi <a></a> czy tylko wymienić opis w tym co podałeś ?
Xardas93
Tak, chcę wpisać go w tagi <a></a>. Na stronie ma powstać link, który będzie można kliknąć.

Dzięki za zainteresowanie tematem wink.gif
_Borys_
  1. <?php
  2.  
  3. $url = '[url=http://nazwastrony.pl/forum/viewtopic.php?f=151&t=1955:1xlfjr8l]Welcome[/url:1xlfjr8l]';
  4. $link = preg_replace('/\[url=(.+)\?.+=\d+&.+=(\d+).+\]/','<a href="$1?p=$2">TU TREŚĆ WYŚWIETLANA, KLIKALNY LINK</a>', $url);
  5. echo $link;
  6.  
  7. ?>
Xardas93
OK - działa dla tego konkretnego przykładu. Co jednak, jeśli chciałbym, żeby to, co wyświetlane, zależało od tego, jak wygląda wpisany w bazie link? Mam na myśli, na przykładzie, który podałeś: w linku z bbcode jest widoczna w poście treść: Welcome. Chciałbym, żeby na mojej stronie również widoczne było: Welcome. Ale ma to być funkcja uniwersalna, tzn. jeśli ktoś w poście wstawi linka z opisem: Borys, na stronie ma wyświetlić się Borys. Bo teraz opis jest na sztywno przyporządkowany.

A i link miał odsyłać do tylko do strony, a nie forum - czyli do http://www.costam.pl/zobacz.php?p=1749 a nie do http://www.costam.pl/forum/viewtopic.php?p=1749 Ale z tym sobie chyba sam poradzę smile.gif

Dzięki wielkie za pomoc! (I klikam: pomógł, oczywiście smile.gif )
_Borys_
W pierwszym poście pisałeś, że na sztywno opis to tak zrobiłem.
Poprawione
  1. <?php
  2.  
  3. $url = '[url=http://nazwastrony.pl/forum/viewtopic.php?f=151&t=1955:1xlfjr8l]Welcome[/url:1xlfjr8l]';
  4. $pattern = '/\[url=(http:\/\/.+?\/).+\?.+=\d+&.+=(\d+).+\](.+)\[.+/';
  5. $replacement = '<a href="$1zobacz.php?p=$2">$3</a>';
  6. $link = preg_replace($pattern, $replacement, $url);
  7. echo $link;
  8.  
  9. ?>
Xardas93
Działa idealnie! Wielkie dzięki za pomoc! smile.gif

EDIT: Stosując tę funkcję muszę jednak - w razie, gdy ktoś poda linka w poście - edytować stronę; bo zmienia się zawsze zmienna $url. Czy da się zrobić tak, żeby to szło z automatu? Chodzi mi o to, żeby skrypt samodzielnie wyszukał w dowolnej treści linki w bbcode (np.
[url=http://nazwastrony.pl/forum/viewtopic.php?f=151&t=1955:1xlfjr8l]Pomoc 1[/url:1xlfjr8l]
[url=http://nazwastrony.pl/forum/viewtopic.php?f=208&t=2044:jsy3hs73]Pomoc 2[/url:jsy3hs73]
[url=http://nazwastrony.pl/forum/viewtopic.php?f=288&t=3855:jsp302pd]Pomoc 3[/url:jsp302pd] )

I każdy poprawnie zamienił bez potrzeby definiowania za każdym razem właściwie zmiennej $url ręcznie.
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.