Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: text2link
Forum PHP.pl > Forum > Gotowe rozwiązania
Project
Witam!
jakis czas temu pisalem skrypt link2text i z perspektywy czasu to bylo baaardzo latwe ale teraz pisze cos w druga strone ale nie za bardzo mam pomysl na szybki algorytm...
sad.gif
Problem polega na zamianie textu w postaci http://www.test.pl lub www.test.pl na aktywne linki w postaci:
<a href=http://www.test.pl>www.test.pl</a>
ktos ma jakis pomysl jak to zrobic w jak najkrotszym czasie??

Z gory dziekuje za odpowiedzi!

POZDRAWIAM
kurtz
Cytat
Witam!
jakis czas temu pisalem skrypt link2text i z perspektywy czasu to bylo baaardzo latwe ale teraz pisze cos w druga strone ale nie za bardzo mam pomysl na szybki algorytm...
:(
Problem polega na zamianie textu w postaci http://www.test.pl lub www.test.pl na aktywne linki w postaci:
<a href=http://www.test.pl>www.test.pl</a>
ktos ma jakis pomysl jak to zrobic w jak najkrotszym czasie??
zajrzec do zrodla tego forum - szybciej chyba sie nie da ;)
Project
A z jakiej skladni korzysta to forum??
:?:
kod zrodlowy phpbb to ponad 600 kilo z tego co widze!
jest gdzie szukac...
sad.gif
Mozesz cos konkretniej... :?:
kurtz
Cytat
kod zrodlowy phpbb to ponad 600 kilo z tego co widze!
jest gdzie szukac...
wiec nie marudz tylko do boju.. na pewno musisz suzkac plikow zawierajacych 'www' i pewnie tez 'http'. teraz sprobuj ty. to chyab nie trudne ;)

pozdrawiam
Project
Jak mam byc szczery to nie jestes ani zbyt pomocny ani mily!!!
bardzo mnie to martwi.
sad.gif
Jezeli nie masz do zaprezentowania jakiegos konkretnego pomyslu to poprostu nie zabieraj udzialu w dyskusji!!!
To ze przy nicku masz dopisane moderator nie upowaznia Cie do traktowania reszty ludzi z gory!

PS co do szukania w godzi phpbb to tez nie takie latwe jak Ci sie wydaje!!!
postaraj sie cos tam znalezc a penie zajmie Ci to spory kawalek czasu!!!
Jabol
[php:1:76348dfd73]<?php
$text=preg_replace("#+://)([w-]+.([w-]+.)*[w]+(:[0-9]+)?(/[^ "nrt<]*?)?)](.*?)#si", '<a href="1://2">3</a>', $text);
?>[/php:1:76348dfd73]to będzie jakoś tak, nie jestem tylko pewien, czy tych 3 nie powinno się wziąść w nawiasy...

Ps. znalazłem i przerobiłem w phpbb (przerobiłem- więc może nie działać!).
Project
ok!
dzieki
za przykladowy kod i wlasnie sobie uswiadmoilem blad w moim mysleniu...
moja pierwsza mysla bylo sprawdzanie wystapien http w danym ciagu i zakladanie takiej petelki ktora kazde znalezione wyrazenie pasujace do wzorca zamieni na link... a przeciez istnieja funkcje takie jak preg_replace
jakas zacma mnie chwycila
;(
no coz bywa i tak

PS a kurzt kazal mi szukac tam http i www smile.gif
to bym szukal i szukal
he he
co za koles...
kurtz
Cytat
a kurzt kazal mi szukac tam http i www :)
to bym szukal i szukal
he he
co za koles...
praktyk. wytrenowalem juz kilku programistow ;p
kurtz
Cytat
Jak mam byc szczery to nie jestes ani zbyt pomocny ani mily!!!
bardzo mnie to martwi.

dlaczego? bo wole dac wedke a nie rybe?


Cytat
Jezeli nie masz do zaprezentowania jakiegos konkretnego pomyslu to poprostu nie zabieraj udzialu w dyskusji!!!
[..]
PS co do szukania w godzi phpbb to tez nie takie latwe jak Ci sie wydaje!!!
postaraj sie cos tam znalezc a penie zajmie Ci to spory kawalek czasu!!!
pomysl byl bardzo konkretny misiek. find + grep rozwiazaly go bardzo szybko ;)

i jak mysz mi swiadkiem nie staram sie patrzec z gory - ale wezme pod uwage twoje slowa.

pozdrawiam
Jabol
a nie łatwiej było poszukać (jak ja) w pliku, który się nazywa "bb_code.php"...
Cod
A ja zrobiłem przed chwilą własny skrypcik na to smile.gif. Tak żeby sprawdzić, czy umiem biggrin.gif.

[php:1:3408d7a0ac]<?php
if(isset($HTTP_POST_VARS["tekst"]))
{
$tekst=$HTTP_POST_VARS["tekst"];
$tekst=nl2br($tekst);
$wiersze=explode("n", $tekst);
$new="";
$znak=array(".", ",", "!", "?");
$end[0]="";
for($i=0;$i<count($wiersze);$i++)
{
$tablica=explode(" ", $wiersze[$i]);
for($j=0;$j<count($tablica);$j++)
{
if(substr($tablica[$j], 0, 7)=="http://")
{
$end[$j]="";
for($k=0;$k<count($znak);$k++)
{
if(substr($tablica[$j], strlen($tablica[$j])-1, 1)==$znak[$k])
{
$tablica[$j]=substr($tablica[$j], 0, strlen($tablica[$j])-1);
$end[$j]=$znak[$k];
}
}
$tablica[$j]="<a href="".$tablica[$j]."" target=_blank>".$tablica[$j]."</a>".$end[$j];
}
elseif(ereg("@", $tablica[$j])==TRUE)
{
$end[$j]="";
for($k=0;$k<count($znak);$k++)
{
if(substr($tablica[$j], strlen($tablica[$j])-1, 1)==$znak[$k])
{
$tablica[$j]=substr($tablica[$j], 0, strlen($tablica[$j])-1);
$end[$j]=$znak[$k];
}
}
$tablica[$j]="<a href="mailto:".$tablica[$j]."">".$tablica[$j]."</a>".$end[$j];
}
$new=$new." ".$tablica[$j];
}
}
echo "Tekst wpisany przez Ciebie:<br><br>$tekst<br><br>Tekst wygenerowany przez skrypt:<br><br>$new";
}
else
{
echo "<form method=post action=zmiana.php>Napisz jakis tekst zawierajacy adresy stron www i emaile i kliknij 'OK'.<br><br><textarea name=tekst cols=60 rows=10></textarea><br><br><input type=submit value=OK></form>";
}
?>[/php:1:3408d7a0ac]
Jak to działa, możecie zobaczyć pod tym linkiem: http://cod.home.staszic.waw.pl/testy/zmiana.php. Skrypt szuka ciągu "http://" i zamienia na hyperlink. Znajduje też małpę (@) i daje klikalny odnośnik z poleceniem "mailto:". Skrypt radzi sobie z linkami, po których jest kropka, przecinek, wykrzyknik lub znak zapytania. Przetestujcie sobie i powiedzcie co o tym sądzicie smile.gif.
Jabol
nie radzi sobie z user:haslo@test.pl/ podaje mailto, a ja chciałem, żeby podał zwykłu link, który miałaby zinterpretować przeglądarka (domyślnie, http).
Cod
No rzeczywiście sad.gif. Przecież może być "ftp://", itp. Nie pomyślałem o tym... Ale gdyby ktoś chciał prosty skrypcik do konwersji samych "http://" i adresów mejlowych, bierzcie ode mnie! biggrin.gif

A tak BTW: Mógłby ktoś wytłumaczyć to?

[php:1:a520a528a7]<?php
$text=preg_replace("#+://)([w-]+.([w-]+.)*[w]+(:[0-9]+)?(/[^ "nrt<]*?)?)](.*?)#si", '<a href="1://2">3</a>', $text);
?>[/php:1:a520a528a7]
Project
troche inaczej (zywcem z manuala)
smile.gif
Kod
$atext = preg_replace("/([w]+://[w-?&;#~=./@]+[w/])/i","<A TARGET="_blank" HREF="$1" class=l>$1</A>", $atext);

tak na wypadek jak ktos by tego szukal w przyszlosci
smile.gif

PS niestety nie obsluguje tez postaci user:pass@host.net
sad.gif
Cod
Bomba! To ja się tyle męczyłem (i tak jeszcze nie zawsze dobrze działało), a tu się okazuje, że wszystko robi jedna funkcja!!! biggrin.gif A może ktoś chciałby wytłumaczyć jeszcze tylko, jak to dokładnie działa?
DeyV
Chyba nie ma innego wyjścia, jak wziąść manual, i postudiować dział o wyrażeniach regularnych. Bardzo pouczające, a bez tego ani rusz. Jak samodzielnie nie spróbujesz i nie przetestujesz, to tego nie załapiesz sad.gif
Dużo może też wnieść to forum, poszukaj w.r., w r i wyrażenia ...
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-2024 Invision Power Services, Inc.