| 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: 17 let
|
|||
0