Autor | Zpráva | ||
---|---|---|---|
matlala Profil |
#1 · Zasláno: 25. 3. 2009, 11:36:31
ahoj,
potřeboval bych pomoct s úpravou reguláru pro mpřeklad odkazů. Měl by přeložit vše s http:// (včetně zvláštních znaků v URL-#%...). Alwe bay nepřekládal nic uvnitř html tagů<tag atributy="http://url.cz">. Můj script je tady: <?php header("Content-Type: text/html; charset=UTF-8"); $text=' <div class="gagdet-cont"> <div class="main-cont"> <h3 class="title s_win_title"> <span class="text"><a href="http://www.horoskopy.cz/">Horoskopy</a></span> <span class="edit"> <a href="/nastaveni-horoskopu" class="edit-text">nastavit znamení</a> </span> <span class="bck"></span> </h3> <div class="g-cnt s_win_area"> <p> <span class="zodiac-8-img-span"> <img src="http://seznam.cz/st/img/zodiac/8.gif" width="40" height="30" alt="Štír" /></span> <a href="http://horoskopy.cz/stir/"><strong>Štír:</strong> Stanete se bezděčným svědkem rozmluvy, která vám otevře oči, chraňte se však přiznat, odkud své informace máte....</a> </p> <div class="clear"></div> </div> </div> </div> </div>';//zkušební kus html ze seznam.cz $regular_href='http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)';//regulár pro překlad. Překládá $slova = explode(" ",$text); $text = ""; for($i = 0; $i < sizeof($slova); $i++) { if(eregi_replace($regular_href, '<a href="http://\\1">http://\\1</a>', $slova[$i])) { $delka = strlen($slova[$i]); $zpracuj_cast=substr($slova[$i], 0, $delka); $cast=wordwrap($zpracuj_cast, 60, " ", 1); $slova[$i] = eregi_replace($regular_href, '<a href="http://\\1">'.$cast.'</a>', $slova[$i]); } else { $slova[$i] = wordwrap($slova[$i], 60, " ", 1); } $text .= " ".$slova[$i]; } // převod odkazů echo $text; ?> předem díky protože reguláry jsou dost silný kafe, snažím se je pořádne pochopit už asi půl roku a skoro nic. |
||
Casper Profil |
#2 · Zasláno: 26. 3. 2009, 19:00:51
zkus:
$regular_href='[\s]http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)';//regulár pro překlad. Překládá pak by se měl odkaz převést pouze pokud před vlastním URL nachází nějaký prázdný znak(mezera třeba) |
||
matlala Profil |
#3 · Zasláno: 26. 3. 2009, 19:50:02
nee, nefunguje, prázdný znak tam být nemusí může to být </tag>http://...<tag>, mám to totiž z tinymce editoru, takže to je HTML i s nepřeloženými odkazy.
|
||
Casper Profil |
#4 · Zasláno: 26. 3. 2009, 21:23:07 · Upravil/a: Casper
V tom případě zkus definovat, že řetězec nesmí začínat =" já osobně jsem to zkoušel nějak takhle:
$regular_href='[^=\"]http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)'; ale nefungovalo to takže to asi nebude správně :) , zkus si s tím pohrát, když se ti to podaří, napiš sem jak to funguje at se taky přiučím :) |
||
matlala Profil |
#5 · Zasláno: 27. 3. 2009, 15:46:49 · Upravil/a: matlala
no ležel jsme v jedné knížce co mám a vztam bylo že začátek nesmí začínat stylem
^[^=\"] |
||
matlala Profil |
#6 · Zasláno: 28. 3. 2009, 17:59:42
zatím mi funguje jenom
$regular_href='^http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)';//regulár pro překlad Přeloží <div class="clear"></div> </div> </div> </div><img src="http://vput.cz/obrazek.jpg" alt="obrazek"> </div> http://horoskopy.cz/stir/[/pre] |
||
matlala Profil |
#7 · Zasláno: 30. 3. 2009, 21:34:42
asi to mám, nic lepšího jsme nevymyslel:
function PrevodOdkazu($vstup,$MaxDelka=100,$MaxDelkaSlova=100){ $text=eregi_replace(" +", " ", $vstup);//odstraní přebytečné mezery $text = eregi_replace('http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)', ' http://\\1 ', $text);//přidá před a za odkaz mezery $text = eregi_replace('" http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*) "', '"http://\\1"', $text);//odsraní mezery v atributech html-třeba u href="http://..." $regular_href='^(http://[a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)$';//regulár pro překlad. Překládá $slova = explode(" ",$text); $text = ""; for($i = 0; $i < sizeof($slova); $i++) { if(eregi_replace($regular_href, '<a href="http://\\1">http://\\1</a>', $slova[$i])) { $cast=substr($slova[$i], 0, $MaxDelka); if(strlen($slova[$i])>$MaxDelka){$cast.="...";}//pokud je odkaz delší než $MaxDelka bude zkrácen na $MaxDelka a přidají s eza něj ...(tečky)) $slova[$i] = eregi_replace($regular_href, '<a href="http://\\1">'.$cast.'</a>', $slova[$i]);//samotný převod } else { $slova[$i] = wordwrap($slova[$i], $MaxDelkaSlova, " ", 1);//zalomí extrémě dlouhá slova delší než $MaxDelkaSlova } $text .= " ".$slova[$i]; } $preklad=array("&"=>"&"," <a href=\""=>"<a href=\"","</a> "=>"</a>"); $text=strtr($text,$preklad);//přeloží odkazy do správné podoby s ASCII a převede zpátky mezery před a za odkazem return $text; } Tohle ošetřuje nejen odkazy ale i délku slov a převádí & na ASCII & Pokud má někdo lepší řešení sem s ním |
||
matlala Profil |
#8 · Zasláno: 1. 4. 2009, 17:14:26 · Upravil/a: matlala
tady ještě vylepšení:
function PrevodOdkazu($vstup,$MaxDelka=100,$MaxDelkaSlova=100){ $text=eregi_replace(" +", " ", $vstup);//odstraní přebytečné mezery $text = eregi_replace('http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)', ' http://\\1 ', $text);//přidá před a za odkaz mezery $text = eregi_replace('" http://([a-zA-Z0-9\?=%&/\$\._äëöü#;-]*) "', '"http://\\1"', $text);//odsraní mezery v atributech html-třeba u href="http://..." $regular_href='^(http://[a-zA-Z0-9\?=%&/\$\._äëöü#;-]*)$';//regulár pro překlad. Překládá $slova = explode(" ",$text); $text = ""; for($i = 0; $i < sizeof($slova); $i++) { if(eregi_replace($regular_href, '<a href="\\1">'.$cast.'</a>', $slova[$i])) { $cast=substr($slova[$i], 0, $MaxDelka); if(strlen($slova[$i])>$MaxDelka){$cast.="...";}//pokud je odkaz delší než $MaxDelka bude zkrácen na $MaxDelka a přidají s eza něj ...(tečky)) $slova[$i] = eregi_replace($regular_href, '<a href="\\1">'.$cast.'</a>', $slova[$i]);//samotný převod } else { $slova[$i] = wordwrap($slova[$i], $MaxDelkaSlova, " ", 1);//zalomí extrémě dlouhá slova delší než $MaxDelkaSlova } $text .= " ".$slova[$i]; } $vychozi=array("&"," <a href=\"","</a> "); $nahrad=array("&","<a href=\"","</a>"); $text=str_replace($vychozi,$nahrad,$text);//přeloží odkazy do správné podoby s ASCII a převede zpátky mezery před a za odkazem return $text; } |
||
Časová prodleva: 15 let
|
0