![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%) ![]() ![]() |
Jeśli w tekście są adresy URL, np. http://onet.pl to chciałbym żeby były zamieniane na linki: <a href="http://onet.pl>onet.pl</a> i odpowiednie wyrażenie regularne mam:
No, ale to wyrażenie regularne zamienia mi na linki też adresy url wewnątrz, np. <img src="..." />, <a href="....">...</a>, <iframe src="..."></iframe> itp. - jak temu przeciwdziałać? |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%) ![]() ![]() |
wNogachSpisz: własnie - generalnie pytanie było odnośnie metody przetworzenia tekstu źródłowego jako inny, treściowo identyczny tekst, z udogodnieniem w postaci "jeśli jest URL, to dajmy go w wygodniejszy sposób - taki, by user mógł po prostu kliknąć, zamiast przerzucać do paska adresu przez schowek". Tak przynajmniej ja zrozumiałem pierwszy post w wątku.
I teraz ad meritum: jeśli mamy DOWOLNY ciąg znaków, to musimy sprawdzić, czy gdzieś tam nie zapodział się URL. To jest to co sam napisałeś: "Trzeba znaleźć "wolnostojące" adresy, czyli takie które są otoczone albo przez białe znaki, albo przez początek/koniec bloku". Zgodzisz się chyba z moim stwierdzeniem, że skoro "trzeba znaleźć adresy", to musimy mieć/znać metodę na określenie początku i końca dowolnego poprawnego adresu, prawda? Idąc dalej: mając wyszukany dowolny adres URL możemy otoczyć go w tagi html i zaprezentować w "klikalnej" formie. Dodatkowe założenie: istniejące już w tekście odnośniki html (np. do obrazków) zostawiamy bez obróbki. I to w zasadzie koniec tematu - metodologię mamy określoną. Pozostaje wybór narzędzia. W związku z tym nasuwa się pytanie: czy można określić, czy dany ciąg znaków otoczony konkretnymi znakami (białymi znakami) jest adresem URL - i czy da się to zrobić za pomocą regexpa? Odpowiedź jest jedna: MOŻNA. Można to zrobić za pomocą wyrażenia regularnego (tak jak pisał croc) - zacytowany przez niego regexp daje sobie radę ze znakomitą większością adresów. Jak dla mnie metoda jest OK - zaś chciałem zwrócić uwagi na małe niedoróbki tego regexpa. Niedoróbkami są "tylko i aż" dwie rzeczy: olewanie prostych nazw hostów (bez domen) i olewanie adresów IP podanych w postaci numerycznej. Oczywiście regexp jest do małej modyfikacji - nie może się zaczynać od "^" i kończyć na "$" - w obu miejscach trzeba dane znaki zamienić na "\s" i po wrzuceniu tego regexpa do preg_replace powinno działać. |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 15:52 |