alfs Posted August 1, 2004 Report Share Posted August 1, 2004 ieksh mysql db glabajas daznedazadi teksti un ieksh tiem ir mail adreses, kuras izvadot vajadzetu konvertet no mana@adrese.lv uz <a href="mailto:no@spam.org" onclick="return(sm('mana', 'adrese.lv'));">e-pasts</a> skaidrs, ka vajadzetu ciklu, kas iet cauri stringam un skatas pec kadas regularas izteiksmes meila adreses un kad kadu atrod, parvers par vajadzigo. parverst varetu diezgan vienkarsi, bet nezinu, ka dabut gatavu to atrasanu, jo regular expressions man ir diezgan svesa lieta. varbut kads var palidzet? Link to comment Share on other sites More sharing options...
Venom Posted August 2, 2004 Report Share Posted August 2, 2004 /me lieto $txt=preg_replace_callback ( '#([^"\'><0-9a-z]|^)([0-9a-z][-_\.]?[0-9a-z]*@[0-9a-z]+[-.]?[0-9a-z]+\.[a-z]{2,})([^"\'><])#mi', 'mcallback', $txt ); kur iekš function mcallback() starp citu taisa $mail=str_replace('@','@',$mail); ... str_replace('.','.dot.',$mail); ... str_replace('@','.at.',$mail); resp. some@some.some.lv pārveido par <a href="mailto:some.at.some.dot.some.dot.lv" onclick="return spam(this)">some@some.some.lv</a> JavaScripts savukārt satur: function spam(element) { if (!element.href) return; addr=element.href; addr=addr.replace(new RegExp('\.at\.'),'@'); addr=addr.replace(new RegExp('\.dot\.','g'),'.'); mw=window.open(addr,''); element=null; return false; } Link to comment Share on other sites More sharing options...
alfs Posted August 3, 2004 Author Report Share Posted August 3, 2004 tu varetu iedot mcallback() pilno versiju? (ar visiem matches un return) cik saprotu, tad mail adresei vajadzetu slepties zem matches[0], ja? bet ja ta tas ir, tad, manuprat, ta regulara izteiksme nav isti pareiza - cik nu man iznaca izlaist cauri stringam ar mail adresem un katram pielikt sakuma un beigas #, lai redzetu, ko vins ir atradis. bet nu loti iespejams, ka kludos, jo no tas izteiksmes neko daudz nesaprotu. un kapec $mail=str_replace('@','@',$mail); ? kada jega replacot @ ar @? Link to comment Share on other sites More sharing options...
Venom Posted August 3, 2004 Report Share Posted August 3, 2004 (edited) str_replace @ pret _&_#64; vizuāli izskatās tāpat, bet vairums spambotu neķer visa padarīšana ir vienas lielākas padarīšanas daļa, bet svarīgākais izskatās apm. tā: $mail=$parts[2];//mail@mail.zone $tmp='<a '; if ($opt['linkup']['nospam']) { $tmp.='onclick="return '.$opt['linkup']['nospam'].'(this)" '; $mail=str_replace('@','_&_#64;',$mail); $parts[2]=str_replace('.','.dot.',$parts[2]); $parts[2]=str_replace('@','.at.',$parts[2]); } if ($opt['linkup']['mlink']>1) $tmp.='class="email" '; $tmp.='href="mailto:'.$parts[2].'">'; if ($opt['linkup']['mlink']>2) $tmp.='<img alt="" src="'.$opt['linkup']['email'].'" />'; return $tmp.$parts[1].$mail.'</a>'.$parts[3]; $opt['linkup']['nospam'] nosaka de-protektēšanas javasvript f-jas nosaukumu, e.g. kā augstākminētās 'spam' $opt['linkup']['mlink'] - ja 2 (vai vairāk), tad tiek a elementam tiek pielikta CSS klase "email" (kurai var uzlikt before: {content:'links uz mailu'}), bet content nestrādā iekš tā IE (pagaidām vienīgais no CSS, kas man pietrūksts iekš IE) ja 3 vai vairāk, tad priekšā linka tekstam tiek pielikta ikoniņa ar aploksnīti vai ko tml. (otrā funkcija, kas linko URLus, tos vel sašķiro pa "uz attēlu, lokāls, nelokāls, šajā saitā") Edited August 3, 2004 by Venom Link to comment Share on other sites More sharing options...
Venom Posted August 3, 2004 Report Share Posted August 3, 2004 update: #([^"\'><0-9a-z]|^)([0-9a-z][-_\.]?[0-9a-z]*@[0-9a-z]+[-.]?[0-9a-z]+\.[a-z]{2,})([^"\'><]|$)#mi note the |$ in the last brackets - neķēra adreses kas bija pašās teksta beigās bez kaut kāda punktuācijas simbola pēc tam izteiksmes paskaidrojums: a) mi beigās - multilīniju, caseless pirmais () - a) ^ sākumā iekš [] nozīmē "jebkurš simbols izņemot ...", tātad izņemot " un ' (lai atmestu situācijas href=_"|'_some@some.lv"|'), >, lai atmestu situācijas (<a ..._>_some@some.lv), < (visādam gadījumam), vai līnijas sākums |^ tālāk seko paša email meklēšana, kur emails ir teksts, kas sākas ar vismaz vinu latīņu burtu vai ciparu, tālāk var saturēt -, _, vai . (man škiet, ka nedrīkstēja būt vairāki, ja kas []? vietā ? aizvietojam pret *) un jebkuru daudzumu ciparu vai latīņburtu, zīmi @, domēna daļu, kas līdzīga pirmai, punkts, domēnzonas daļu, kas parasti ir no 2 simboliem (lv,com,info, un kas zin vai drīz nebūs arī kāds .business) beigu() līdzīgi kā pirmajā () pieļauj vai nu rindas beigas (|$) vai jebkuru simbolu, kas nav " vai ' (tā pati href="|'some@some.lv_"|'_), < (<a ...>some@some.lv_<_/a>) un > visādam gadījumam ņemam regulāro izteiksmi, ejam uz http://venom.eclub.lv/VenRExp/ iekopējam augšējā inputā, iekš haystak ierakstam kaut kādu (some@some.lv) some@other.lv un skatāmies, kādi matči sanāk, ekperimentējam ;) Link to comment Share on other sites More sharing options...
alfs Posted August 3, 2004 Author Report Share Posted August 3, 2004 parbaudot shadus piemerus: 1) mail@domain.lv 2) mail_mail@domain.lv 3) mail.mail@domain.lv 4) mail@dom-ain.lv pareizi stradaja tikai 1 2 un 3 nepilnigi (netika nemts vera sakums "mail_" un "mail.") 4 vispar netika uzskatits par mail adresi. un otrais/tresais ir diezgan izplatits variants :( Link to comment Share on other sites More sharing options...
Venom Posted August 3, 2004 Report Share Posted August 3, 2004 (edited) tā viš i, kad raksta no atmiņas try this (ja pareizi nopostosies) #([^"'><a-z0-9]|^)([0-9a-z]+[-_\.0-9a-z]*@[0-9a-z]+[-\.0-9a-z]+\.[a-z]{2,})([^"'><]|$)#mi Edited August 3, 2004 by Venom Link to comment Share on other sites More sharing options...
bubu Posted August 3, 2004 Report Share Posted August 3, 2004 alfs, dari vienkārši šādi: <?php $text = 'mails1@mail.lv navmails mails-mails2@mail.lv te ar nav @ mails test.abc@ccc.ddd.lv'; $text = preg_replace('/([-_\.\w\d]+)@(([-_\w\d]+\.)+)(\w+)/mi', '<a href="mailto: \1 at \2\4" onclick="return(sm("\1", "\2\4"));">\1 at \2\4</a>', $text); echo $text; ?> Link to comment Share on other sites More sharing options...
bubu Posted August 3, 2004 Report Share Posted August 3, 2004 Venom, punkti jāesceipo :) Link to comment Share on other sites More sharing options...
Venom Posted August 3, 2004 Report Share Posted August 3, 2004 Venom, punkti jāesceipo :) es jau teicu, ja pareizi nopostosies Link to comment Share on other sites More sharing options...
bubu Posted August 3, 2004 Report Share Posted August 3, 2004 A kā tas ir, ka nepareizi nopostojās? Man vienmēr, ko esmu te rakstījis, postojās tieši tā kā esmu ierakstījis. :huh: Link to comment Share on other sites More sharing options...
Venom Posted August 3, 2004 Report Share Posted August 3, 2004 alfs, dari vienkārši šādi: <?php $text = 'mails1@mail.lv navmails mails-mails2@mail.lv te ar nav @ mails test.abc@ccc.ddd.lv'; $text = preg_replace('/([-_\.\w\d]+)@(([-_\w\d]+\.)+)(\w+)/mi', '<a href="mailto: \1 at \2\4" onclick="return(sm("\1", "\2\4"));">\1 at \2\4</a>', $text); echo $text; ?> man nepatīk tas, kas notiek, ja tavs preg tiek palaists pa virsu šādam tekstam: mail@domain.lv <a href="mailto:mail_mail@domain.lv">mail_mail@domain.lv</a> <a href="mailto:<a href="mailto: mail_mail at domain.lv" deļ tā jau manā kļūdas, ka mēģinu izvairīties no tādas situācijas ;) Link to comment Share on other sites More sharing options...
Venom Posted August 3, 2004 Report Share Posted August 3, 2004 A kā tas ir, ka nepareizi nopostojās? Man vienmēr, ko esmu te rakstījis, postojās tieši tā kā esmu ierakstījis. :huh: kaut kas ar slašiem ne vienmēr ka vajag vai nu arī kopējot no apstofu ieķšām ('text cut text') jāatslešo atpakaļ un saiet grīstē (atslešo to, kam vajag palikt noslašotam) Link to comment Share on other sites More sharing options...
bubu Posted August 3, 2004 Report Share Posted August 3, 2004 man nepatīk tas, kas notiek, ja tavs preg tiek palaists pa virsu šādam tekstam: mail@domain.lv <a href="mailto:mail_mail@domain.lv">mail_mail@domain.lv</a> Es saprotu, ka mans ir ļoti primitīvs pregs, bet ja pats zin, kur un kā to pielieto, tad jau viss oki. Un kamdēļ mocīties un mēģināt rakstīt ko universālu, ja zinu, ka to pielietošu tikai vienu reizi :) Link to comment Share on other sites More sharing options...
Recommended Posts