Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: eregi - zamiana linków na aktywne / klikalne
Forum PHP.pl > Forum > PHP
G. Skaruz
Witam

Chciałbym zamienić zwykłe link oraz adresy mailowe na klikalne, mam taki kod
  1. function html_activate_links($str)
  2. {
  3. $str = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_;\+.~#?&//=]+)', '<a href="\\1" class="white">\\1</a>', $str);
  4. $str = eregi_replace('([[:space:]()[{}])(www.[-a-zA-Z0-9@:%_\+.~#?&//=]+)', '\\1<a href="http://\\2" class="white">\\2</a>', $str);
  5. $str = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})','<a href="mailto:\\1" class="white">\\1</a>', $str);
  6. return $str;
  7. }
  8.  
  9. $strinl = 'odstep <a href="http://www.onet.pl/obrazki/obrazek.jpg" target="_blank">http://www.onet.pl/obrazki/obrazek.jpg</a> - <br /> odstep <a href="../../../obrazki/zdjecie.jpg">link</a> odstep <br /> <a href="mailto:test@test.pl">test@test.pl</a><br /> test2@test2.pl - odstep';
  10. echo html_activate_links($strinl);

ale jako wynik zwraca m.in coś takiego
<a href="mailto:<a href="mailto:test@test.pl" class="white">test@test.pl</a>">

Ktoś może poratować działającym przykładem?
deha21
U mnie to działa dobrze. Zwraca normalny link - <a href="mailto:test@test.pl" class="white">test@test.pl</a>
G. Skaruz
Wrzuciłem plik tutaj - http://www.skaruz.com/activate.php
Wynikiem jest m.in coś takiego:
test@test.pl">test@test.pl
wdev
Pamiętaj, że funkcja analizuje cały kod, a nie tylko to, co chcesz zobaczyć. Więc twój skrypt zamienia też link w atrybucie href elementu a. Jako rozwiązanie proponuję pozostawienie maili, po których następuje cudzysłów (czyli są w atrybucie href) lub </a> (czyli już mają swój link) nieruszonych.
  1. $str = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})([^(</a>)|"])','<a href="mailto:\\1" class="white">\\1</a>', $str);


Jeżeli chcesz przypisać klasę white tym które są w znaczniku <a></a>, to wiesz, jak to zrobić winksmiley.jpg

PS. POSIX jest zarzucany przez PHP. W 5.3 dostaniesz błąd E_DEPRECATED.
G. Skaruz
Cytat(wdev @ 12.11.2010, 16:36:48 ) *
Pamiętaj, że funkcja analizuje cały kod, a nie tylko to, co chcesz zobaczyć. Więc twój skrypt zamienia też link w atrybucie href elementu a. Jako rozwiązanie proponuję pozostawienie maili, po których następuje cudzysłów (czyli są w atrybucie href) lub </a> (czyli już mają swój link) nieruszonych.
  1. $str = eregi_replace('([_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3})([^(</a>)|"])','<a href="mailto:\\1" class="white">\\1</a>', $str);


Jeżeli chcesz przypisać klasę white tym które są w znaczniku <a></a>, to wiesz, jak to zrobić winksmiley.jpg

PS. POSIX jest zarzucany przez PHP. W 5.3 dostaniesz błąd E_DEPRECATED.


Super, o to chodziło.
Serwis jest z tych starszych, więc działa na nie najnowszej wersji PHP.

Wracam z problemem zamiany linków (już nie maili)

  1. $strinl = 'od bawełna :<br />
  2. <a href="http://www.zamotane.pl/image647">aaaaaaa7</a>&nbsp;</p>
  3. <p>Termin wykonania 1-3- gruawełna :<br />
  4. <a href="http://www.zamotane.pl/image_func.php?img=gfx/1a145bf62d7bf120aee119c0c0b749cd.jpg&amp;lang=pl&amp;prod_id=647">http://www.zamotane.pl/image_func.php?img=gfx/1a145bf62d7bf120aee119c0c0b749cd.jpg&amp;lang=pl&amp;prod_id=647</a>&nbsp;</p>
  5. <p>Termin wykonania 1-3- grudnia.</p>dnia.</p>
  6.  
  7. step <a href="http://www.onet.pl/obrazki/obrazek.jpg" target="_blank">http://www.onet.pl/obrazki/obrazek.jpg</a> - <br /> odstep <a href="../../../obrazki/zdjecie.jpg">link</a> odstep <br /> <a href="mailto:test@test.pl">test@test.pl</a><br /> test2@test2.pl - odstep';
  8. echo html_activate_links($strinl);


przy
  1. $str = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_;\+.~#?&//=]+)', '<a href="\\1" class="white">\\1</a>', $str);
robi się sieczka
  1. <a href="<a href="http://www.zamotane.pl/image647" class="white">http://www.zamotane.pl/image647</a>">aaaaaaa7</a>&nbsp;

Gdy jednak zamienię to na
  1. $str = eregi_replace('(((f|ht){1}tp://)[-a-zA-Z0-9@:%_;\+.~#?&//=]+)([^(</a>|"]))', '<a href="\\1" class="white">\\1</a>', $str);

to nie łapie zwykłych tekstowych linków typu
  1. http://www.onet.pl/obrazki/obrazek.jpg
Mephistofeles
Tutaj masz helpera z funkcją _auto_link_urls, która zamienia wszystkie linki na klikalne, możesz sobie zobaczyć jak to jest zrobione.
G. Skaruz
Idealnie działające rozwiązanie znalazłem na stronie
http://zenverse.net/php-function-to-auto-c...into-hyperlink/
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.