![]() |
![]() |
![]()
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 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) |
|
|
![]() ![]() |
![]() |
Aktualny czas: 13.10.2025 - 14:56 |