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: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Kod "[^\"]{1}https?://([-\w\.]+)+(:\d+)?(/([\w/_\.]*(\?\S+)?)?)?[^\"]{1}"
|
|
|
|
Post
#3
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Do parsowania adresów URL służy funkcja parse_url()
Nie wywarzaj otwartych drzwi. Nie wynajduj koła na nowo. Nie używaj wyrażeń regularnych do standardowych zadań. Ten post edytował wNogachSpisz 7.11.2011, 22:18:42 |
|
|
|
Post
#4
|
|
|
Grupa: Zarejestrowani Postów: 247 Pomógł: 11 Dołączył: 5.09.2009 Ostrzeżenie: (0%)
|
hm..... sprawdziłem wyrażenie
dla tekstu: http://gazeta.pl aaaaaa http://onet.pl dd <a href="http://onet.pl">onet.pl</a> ddd http://wp.pl Na stronie testera wyrażeń regularnych: http://regexpal.com/ i odnajduje linki prawidłowo poza sytuacją gdy link jest na samym początku tekstu? Ten post edytował wiewiorek 8.11.2011, 07:23:08 |
|
|
|
Post
#5
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Ok masz poprawke
@wNogachSpisz to może pokaż koledze jak rozwiązać jego problem przy użyciu wspomnianej przez Ciebie funkcji (IMG:style_emoticons/default/wink.gif) |
|
|
|
Post
#6
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
Do parsowania adresów URL służy funkcja parse_url() Do parsowania tak. Do sprawdzania poprawności nie. parse_url używa się dla linków, które już są sprawdzone, bo ta funkcja jest zbyt tolerancyjna. |
|
|
|
Post
#7
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Do parsowania tak. Do sprawdzania poprawności nie. parse_url używa się dla linków, które już są sprawdzone, bo ta funkcja jest zbyt tolerancyjna. Wierutna bazdura, funkcja parse_url() może z powodzeniem służyć do walidacji adrsu URL. Croc, widać że nie masz bladego pojęcia o niczym. Proszę Cię, dla dobra innych formuwiczów, nie wypowiadaj się, jeśli już musisz, to do swoich wypowiedzi załączaj klauzule: "mogę się mylić" lub "nie znam się ale wydaje mi się". Bez tego wprowadzasz zgubną dezinformację.
Ten post edytował wNogachSpisz 8.11.2011, 11:33:20 |
|
|
|
Post
#8
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
|
|
|
|
Post
#9
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Przeczytaj dokładnie mój code snip, żeby walidować musisz dodpisać: Następnym razem przeczytaj kilka razy to co napisałem. Ten post edytował wNogachSpisz 8.11.2011, 11:55:34 |
|
|
|
Post
#10
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Po co? Skoro jest filter_var?
|
|
|
|
Post
#11
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Po co? Skoro jest filter_var? Jasne, jeśli chcesz tylko walidować URL, filter_var() jest dokładnie tym co potrzebujesz... Natomiastu tutaj trzeba sparsować URL, do czego służy parse_url(), po drodze można bez konieczności używania innych funkcji sprawdzić czy URL jest poprawny.. Wywołanie jednej funkcji jest tańsze niż wywołanie dwóch. Jedyny problem z filter_var(), to fakt że wprowadzono je późno, dopiero w wersji 5.2.0 Ten post edytował wNogachSpisz 8.11.2011, 11:57:49 |
|
|
|
Post
#12
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Ok bo ja się pogubiłem - ludzie przecież cała ta dyskusja jest bez sensu... Autor chciał rozwiązania pozwalającego zamienić ciąg:
Kod jakiś tekst jakiś tekst jakiś tekst jakiś tekst ttp://www.strona.pl jakiś tekst jakiś tekst jakiś tekst jakiś tekst ttp://www.inna-strona.com jakiś tekst jakiś tekst jakiś tekst jakiś tekst (sprzed adresów skasowałem H bo mi na linki zamieniało) na
Nic nie było o żadnej validacji linków, itd... (IMG:style_emoticons/default/smile.gif) Ten post edytował Sephirus 8.11.2011, 12:01:28 |
|
|
|
Post
#13
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
@wNogahSpisz nie chcę się spierać, ale parse_url parsuje linki, a te link trzeba mieć. Autorowi tematu chodzi o ciąg który może zawierać linki, wówczas parse_url IMO nie ma za bardzo do tego jest potrzebne. Jeden preg_match i odpowiednie wyrażenie.
@up ubiegłeś mnie (IMG:style_emoticons/default/wink.gif) Ten post edytował by_ikar 8.11.2011, 12:02:38 |
|
|
|
Post
#14
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
Nic nie było o żadnej validacji linków, itd... (IMG:style_emoticons/default/smile.gif) No tak, ale żeby zamienić, trzeba najpierw znaleźć (IMG:style_emoticons/default/smile.gif) Można byle jak, np. przez wspomnianą funkcję parse_url, która przepuści większość nieprawidłowych linków, a można (większym kosztem) dobrym wyrażeniem regularnym. |
|
|
|
Post
#15
|
|
|
Grupa: Moderatorzy Postów: 36 561 Pomógł: 6315 Dołączył: 27.12.2004 |
Cytat No tak, ale żeby zamienić, trzeba najpierw znaleźć Można byle jak, np. przez wspomnianą funkcję parse_url, Czyli że co? dla parse_url zapodasz cały tekst a on z niego wyłapie url? No raczej nie, do parse_url musisz przekazać już wybrane przez Ciebie url z tekstu a żeby to zrobić musisz tak czy siak użyć wyrażeń regularnych.
|
|
|
|
Post
#16
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
W takim razie trzeba wcześniej załadować HTML do Dom:Document, co utworzy obiekt DOM,
następnie przeszukać bloki tekstowe w poszukiwaniu wyrazów rozpoczynających się na to "https?://". Pozostaje problem zamiany konkretnego adresu url na element anachor to można w sensowny sposób osiągnąć tylko przy pomocy z preg_replace ;p Lub jakiś inny sposób podziału na wyrazy.. Ten post edytował wNogachSpisz 8.11.2011, 12:14:40 |
|
|
|
Post
#17
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
@nospor Masz rację - źle się wyraziłem.
@wnogachspisz - wiesz, że istnieją jeszcze inne protokoły? Ten post edytował croc 8.11.2011, 12:10:17 |
|
|
|
Post
#18
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
|
|
|
|
Post
#19
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
A po co Ci przykładowe dane? o0 Uzależniasz algorytm zamiany URL na linki od tego, jaką ma zawartość? Tzn. jakby miał inną, to byś dał inny algorytm?
|
|
|
|
Post
#20
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
croc nie troluj, zaklinam cie.
|
|
|
|
Post
#21
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Mam też parę innych propozycji zamiast wyrażeń regularnych:
1. Można użyć zcze strpos() - znaleźć wszystko co zaczyna się od "http://" i odpowiednio zamienić. 2. Można dać explode('http://',$ciag_znakow) - też da się wtedy to ładnie pozamieniać i użyć implode. ;P |
|
|
|
Post
#22
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Mam też parę innych propozycji zamiast wyrażeń regularnych: 1. Można użyć zcze strpos() - znaleźć wszystko co zaczyna się od "http://" i odpowiednio zamienić. 2. Można dać explode('http://',$ciag_znakow) - też da się wtedy to ładnie pozamieniać i użyć implode. ;P No nie. Trzeba znaleść "wolnostojące" adresy, czyli takie które są otoczone albo przez białe znaki, albo przez początek/koniec bloku.. I to z włączniem contentu chociażby takich tagów jak anachor. |
|
|
|
Post
#23
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
URL-e zawsze są otoczone znakami... niewchodzącymi do poprawnego URL-a. (IMG:style_emoticons/default/oneeyedsmiley02.png)
|
|
|
|
Post
#24
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
URL-e zawsze są otoczone znakami... niewchodzącymi do poprawnego URL-a. (IMG:style_emoticons/default/oneeyedsmiley02.png) niech ktos z nim cos zrobi, błagam... |
|
|
|
Post
#25
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
A może nie jest tak?
To jest Twoim zdaniem URL? Kod programowaniewymagamyśleniahttp://php.planietylkoklepaniajakmałpa
|
|
|
|
Post
#26
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Tak, tak jest..
Tylko że nic z tego nie wynika. Taka wiedza nie pozwala na bezbłędna zamianę linków na anchory w dowolnym dokumencie HTML zostanie zamienione na : co jest oczywiście nieprawidłowe. Ten post edytował wNogachSpisz 8.11.2011, 13:10:37 |
|
|
|
Post
#27
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
Nie nie pozwala, tylko Ty nie umiesz, a to różnica. Nie wymądrzaj się więcej, bo naprawdę mało wiesz.
|
|
|
|
Post
#28
|
|
|
Grupa: Moderatorzy Postów: 8 989 Pomógł: 1550 Dołączył: 8.08.2008 Skąd: Słupsk/Gdańsk |
Piaskownice zamknęli, deszcz nie napadał że musicie tutaj obrzucać się błotem? Spokojniej, bo zamknę temat.
Powód edycji: [wookieb]:
|
|
|
|
Post
#29
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
Piaskownice zamknęli, deszcz nie napadał że nie musicie tutaj obrzucać się błotem? Aleś sypnął żarcicho (IMG:style_emoticons/default/yahoo.gif) Przepraszam, ale mam alergię na takich szczekaczy. A wracając do tematu, to moim zdaniem jedyną odpowiedzią jest dobry wzorzec dla wyr. regularnego (wyszukany z internetu, bo są ludzie, którzy naprawdę dużo czasu temu poświęcili) i będzie hulać. |
|
|
|
Post
#30
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
A wracając do tematu, to moim zdaniem jedyną odpowiedzią jest dobry wzorzec dla wyr. regularnego (wyszukany z internetu, bo są ludzie, którzy naprawdę dużo czasu temu poświęcili) i będzie hulać. Sypiesz złotymi radami na lewo i prawo... Nie ma takiej możliwości, jedno wyrażenie tego nie załatwi, chyba że takie na 3 strony. Zamknąć oczy, napisać i już nigdy nie zrozumiec co robi i dlaczego nie działa (IMG:style_emoticons/default/happy.gif) . |
|
|
|
Post
#31
|
|
|
Grupa: Zarejestrowani Postów: 706 Pomógł: 108 Dołączył: 12.03.2010 Ostrzeżenie: (0%)
|
Trochę dziwne, że nagle zmieniłeś podejście. Przed chwilą polecałeś parse_url, który nieprawidłowo odczyta mnóstwo URL-i, również takich "z życia wziętych". A dobre wyrażenie regularne nie musi wcale być na 3 strony. Co Ci się nie podoba np. w tym?
Kod ^(?#Protocol)(?:(?:ht|f)tp(?:s?)\:\/\/|~\/|\/)?(?#Username:Password)(?:\w+:\w+@)?(?#Subdomains)(?:(?:[-\w]+\.)+(?#TopLevel Domains)(?:com|org|net|gov|mil|biz|info|mobi|name|aero|jobs|museum|travel|[a-z]{2}))(?#Port)(?::[\d]{1,5})?(?#Directories)(?:(?:(?:\/(?:[-\w~!$+|.,=]|%[a-f\d]{2})+)+|\/)+|\?|#)?(?#Query)(?:(?:\?(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)(?:&(?:[-\w~!$+|.,*:]|%[a-f\d{2}])+=?(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)*)*(?#Anchor)(?:#(?:[-\w~!$+|.,*:=]|%[a-f\d]{2})*)?$
|
|
|
|
Post
#32
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Przepiękne wyrażenie, tyle że kompletnie nie nadające się do tego celu.
Piszesz nie na temat. Pytam grzecznie, uprzejmie i konkretnie, co się stanie z takim przykładem: Nie masz na to odpowiedzi, bo brakuje Ci wiedzy i doświadczenia (oraz innych cech, takich nienabywalnych). Teraz rozmawiają dorośli. Patrz i się ucz. Nie troluj. Ten post edytował wNogachSpisz 8.11.2011, 14:13:08 |
|
|
|
Post
#33
|
|
|
Grupa: Zarejestrowani Postów: 1 527 Pomógł: 438 Dołączył: 28.06.2011 Skąd: Warszawa Ostrzeżenie: (0%)
|
Ok tu się z zgadzam z @wNogachSpisz w takim przypadku dobre rozwiązanie to zastosować twoją metodę z DOM. Swoją drogą to bardzo rzadki przypadek ale możliwy.
|
|
|
|
Post
#34
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
A ja się nie zgodzę i nie muszę używać wcale DOM żeby sprawę załatwić. Można to załatwić jednym wyrażeniem, tyle że z użyciem preg_replace_callback i można załatwić całość w sumie prosto w kilku linijkach:
Kod <?php $str = ' <a href="http://example.com"> http://example.com </a> <br><br> smoe text http://example.com smoe text <a href="http://example.com"> http://example.com </a> smoe text<br> some text https://example.com some text <a href="https://example.com"> https://example.com </a> smoe text<br> smoe text http://subdomian.example.com smoe text <a href="http://subdomian.example.com"> http://subdomian.example.com </a> smoe text<br> some text https://subdomian.example.com some text <a href="https://subdomian.example.com"> https://subdomian.example.com </a> smoe text<br> smoe text http://www.example.com smoe text <a href="http://www.example.com"> http://www.example.com </a> smoe text<br> some text https://www.example.com some text <a href="https://www.example.com"> https://www.example.com </a> smoe text<br> smoe text http://www.subdomian.example.com smoe text <a href="http://www.subdomian.example.com"> http://www.subdomian.example.com </a> smoe text<br> some text https://www.subdomian.example.com some text <a href="https://www.subdomian.example.com"> https://www.subdomian.example.com </a> smoe text '; $replace = preg_replace_callback('#(?:<a[^>]*>.*?</a>|((f|ht)tp(s)?://[^\s]+))#is', 'callbackFunction', $str); function callbackFunction($matches) { if(!empty($matches[1])) { return '<a href="'.$matches[1].'"> '.$matches[1].' </a>'; } else { return $matches[0]; } } echo $replace; Można pewnie to napisać lepiej, to jest tylko taki przykład że da się jednym wyrażeniem i można pominąć to czego nie chcemy (IMG:style_emoticons/default/wink.gif) |
|
|
|
Post
#35
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
BZDURA! Twój pattern błędnie zamienia:
Na: Kiła i mogiła. Bez DOM tego nie zrobisz.. Ten post edytował wNogachSpisz 8.11.2011, 22:18:05 |
|
|
|
Post
#36
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Kolego, nie chce tutaj siać flejmu, bo gdybyś doczytał moją wiadomość do końca to byś zauważył jedną zasadniczą rzecz o której napisałem:
Cytat Można pewnie to napisać lepiej, to jest tylko taki przykład że da się jednym wyrażeniem i można pominąć to czego nie chcemy Podałem przykład z tylko jednym tagiem, to jest przykład, nie gotowiec.. :/ trochę na siłę próbujesz udowodnić swoją rację jakby była jedynym słusznym wyjściem.. Jeżeli działa w przypadku anchora co pokazałem w przykładzie, dlaczego nie miałoby działać w przypadku jakiegokolwiek innego tagu? Bo musi tutaj być DOM? Nie musi co udowodniłem swoim przykładem (IMG:style_emoticons/default/wink.gif) a nawet nie trzeba więcej niż 1 wyrażenia i wcale nie musi mieć nie wiadomo ile lini/znaków. (IMG:style_emoticons/default/wink.gif) |
|
|
|
Post
#37
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Nie rozumiem tej nowomowy.
Działa czy nie działa? Nie działa. Po co komu coś, co nie działa? Zrób porządnie, napisz posta, do tego czasu zamilcz. Ten post edytował wNogachSpisz 8.11.2011, 23:24:45 |
|
|
|
Post
#38
|
|
|
Grupa: Zarejestrowani Postów: 590 Pomógł: 107 Dołączył: 25.10.2011 Ostrzeżenie: (0%)
|
@croc:
regexp mocny, ale jednak mi sie nie podoba. A co mi się nie podoba? Wrzuć do przeglądarki kod:
A jak sam dobrze wiesz, wszystkie URLe w tablicy są prawidłowe (IMG:style_emoticons/default/smile.gif) Generalnie, z tego co widzę, to regexp uwala wszystkie numeryczne adresy IP i wszystkie adresy IP bez POPRAWNEJ domeny (przy czym POPRAWNĄ domeną jest tylko jedna z TLD). Wszelkie domeny "wewnątrzfirmowe" (np. firma.lan) są według tego regexpa niepoprawne. Tak, wiem - regexp to nie resolver - i nie jest od rozwiązywania nazw, więc pomińmy nietypowe/niepubliczne domeny. Ale numeryczne adresy IP są jak najbardziej "valid", podobnie jak adresy z samą tylko nazwą hosta (ciągle aktualny RFC 1035, p. 2.3.1) |
|
|
|
Post
#39
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
@abort
Zlituj się. Walidacja URLi to nie problem. Problemem jest wyciąnięcie ich z HTMLa. |
|
|
|
Post
#40
|
|
|
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ć. |
|
|
|
Post
#41
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Nie doczytałeś, nie można.
Autor tematu ma problem ze swoim wyrażeniem, które zamienia link znajdujący się w atrybucie src znacznika img. |
|
|
|
Post
#42
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Nie rozumiem tej nowomowy. Działa czy nie działa? Nie działa. Po co komu coś, co nie działa? Zrób porządnie, napisz posta, do tego czasu zamilcz. Uważaj z tym ego, bo się rozdymasz i pękniesz kiedyś. To nie jest żadna namowa. Zadałeś pytanie @croc'owi: Cytat Pytam grzecznie, uprzejmie i konkretnie, co się stanie z takim przykładem: Kod <a href="#">this is some http://link.me link</a> A ja udowodniłem że można takie coś rozwiązać podałem przykład nawet z masą linków. Działał przykład odnośnie tego co napisałeś? Działał. Napisałem że to nie jest gotowiec? Napisałem. Więc w czym problem? W tym że ze swoim parse_url wyskoczyłeś jak filip z konopi, ktoś ci napisał że bzdury piszesz a teraz się puszysz. W takim wypadku podaj autorowi tematu gotowiec, o którym piszesz do mnie żebym zamilkł jeżeli nie będę takowego posiadać. Nie odniosłem się do pierwszego posta w tym temacie, tylko do twojego posta i udowodniłem że jesteś w błędzie. Strasznym jesteś hipokrytą, twoje rozwiązanie wcale nie działa (parse_url) i nie zadziała, więc według tego co napisałeś: Cytat Po co komu coś, co nie działa? Zrób porządnie, napisz posta, do tego czasu zamilcz. PS prosił bym jakiegoś moda o uspokojenie @wNogachSpisz bo trochę przegina.. EDIT: na szybkiego działający przykład do znaczników o których napisał autor tematu, czyli gotowiec: Kod <?php $str = ' <a href="http://example.com"> http://example.com </a> <br><br> smoe text http://example.com smoe text <a href="http://example.com"> http://example.com </a> smoe text<br> some text https://example.com some text <a href="https://example.com"> https://example.com </a> smoe text<br> smoe text http://subdomian.example.com smoe text <a href="http://subdomian.example.com"> http://subdomian.example.com </a> smoe text<br> some text https://subdomian.example.com some text <a href="https://subdomian.example.com"> https://subdomian.example.com </a> smoe text<br> smoe text http://www.example.com smoe text <a href="http://www.example.com"> http://www.example.com </a> smoe text<br> some text https://www.example.com some text <a href="https://www.example.com"> https://www.example.com </a> smoe text<br> smoe text http://www.subdomian.example.com smoe text <a href="http://www.subdomian.example.com"> http://www.subdomian.example.com </a> smoe text<br> some text https://www.subdomian.example.com some text <a href="https://www.subdomian.example.com"> https://www.subdomian.example.com </a> smoe text <img src="http://example.com/file.jpg"> some text <iframe src="http://example.com/"> some text http://example.com/ some text</iframe> '; $replace = preg_replace_callback('#(?:<a[^>]*>.*?</a>|<iframe[^>]*>.*?</iframe>|<img[^>]*>|((f|ht)tp(s)?://[^\s]+))#is', 'callbackFunction', $str); function callbackFunction($matches) { if(!empty($matches[1])) { return '<a href="'.$matches[1].'"> '.$matches[1].' </a>'; } else { return $matches[0]; } } echo $replace; rozwiązanie śmieszne, ale działające o co tak bardzo zabiega @wNogachSpisz. Da się jednym wyrażeniem? Ciekawe co tym razem wymyślisz i napiszesz że jest błędne. Ten post edytował by_ikar 9.11.2011, 08:52:06 |
|
|
|
Post
#43
|
|
|
Grupa: Zarejestrowani Postów: 1 233 Pomógł: 87 Dołączył: 6.03.2009 Ostrzeżenie: (40%)
|
Bzdura.
Skoro można skonstruować takie wyrażenie, to dlaczego tego nie zrobisz? Ten post edytował wNogachSpisz 9.11.2011, 11:48:23 |
|
|
|
Post
#44
|
|
|
Grupa: Zarejestrowani Postów: 1 798 Pomógł: 307 Dołączył: 13.05.2009 Skąd: Gubin/Wrocław Ostrzeżenie: (0%)
|
Bzdura. Skoro można skonstruować takie wyrażenie, to dlaczego tego nie zrobisz? Sory że to napisze ale jesteś totalnym ignorantem. Patrz na mój post wyżej, dałem ci gotowe wyrażenie które pomija tagi: img, a, iframe czyli te tagi o których wspomniał autor tego tematu. |
|
|
|
![]() ![]() |
|
Aktualny czas: 30.12.2025 - 11:53 |