[RE] Přepis adres na absolutní – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

[RE] Přepis adres na absolutní – PHP – Fórum – Programujte.com[RE] Přepis adres na absolutní – PHP – Fórum – Programujte.com

 

pawlik0
Grafoman
21. 6. 2008   #1
-
0
-

Potřeboval bych pomoc. V regulérních výrazech preg_replace nejsem nejlepší a zkoumám to už dva dny - bezúspěšně. Proto, pokud by někdo byl tak laskav, tak hotové řešení(přinejlepším).

Můj problém je: Mám zdrojový kód stránky v řetězci $contents a adresu webu v řetězci v $qdecoded. Potřebuji všechny adresy odkazů, stylů, obrázků změnit na absolutní, nejlépe nějaký ustálený formát:

<a href="./"> //vznikne <a href="http://stranka.cz/">

<img src="http://stranka.com"> // vznikne <img src="http://stranka.com/">


Pokud někdo pomůže, opravdu děkuju - může to být více regulérníma výrazama, hlavně ať to půjde :(

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
bukaj0
Věrný člen
22. 6. 2008   #2
-
0
-

pawlik
Na tohle bych asi pustil preg_replace_callback() - http://php.net/preg_replace_callback. Nahrazování neprobíhá přímo definovaným řetězcem, ale výstupem fce předané tzv. callbackem.

<?php

preg_replace_callback("~(href|src)=\"(.*)\"~iU", "preved_adresy", $vstup);
// na každý výstup regulárního výrazu zavolá fce preved_adresy(), které
// předá pole s indexy 0, 1 a 2:
// 0 - odpovídá celému nalezenému řetězci (např. href="http://google.com")
// 1 - první závorka (takže href nebo src)
// 2 - druhá závorka = samotná adresa (např. http://google.com)
// funkce preved_adresy() musí vracet řetězec včetně toho začátku s href=..., resp. src=...
// jinak by se tyto parametry nahradily pouze adresami, což není zamýšleno

Nahlásit jako SPAM
IP: 212.116.219.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
pawlik0
Grafoman
22. 6. 2008   #3
-
0
-

To bukaj : moc ti děkuju... ale nějak mi to nejde. tvořím jednoduchý anonymizer, který by bezchybně fungoval na IC.cz. Můj výtvor(část):



//fce
function ad($arr){
$nalezeno = $arr[0];
$atribut = $arr[1];
$adresa = $arr[2];

if(substr($adresa, 0, 7) == "http://") $start = "";
else{
$pole = explode("/", base64_decode($_GET['q']));
$start = $pole[0]."//".$pole[2] . "/";
}

return $atribut . '="http://www.w.kx.cz/anonymizer.php?act=code&q=' . $start . $adresa . '"';
}

//...

//preg
preg_replace_callback("~(href|src|action)=\"(.*)\"~iU", "ad", $contents);


Odkazy se vůbec nezmění a jedou na těch stávajících adresách. pokud
  return $atribut . '="http://www.w.kx.cz/anonymizer.php?act=code&q=' . $start . $adresa . '"';

změním na
  echo $atribut . '="http://www.w.kx.cz/anonymizer.php?act=code&q=' . $start . $adresa . '"';

Vypíše to:
src="http://www.w.kx.cz/anonymizer.php?act=code&q=http://google.cz/#"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://images.google.cz/imghp?hl=cs&tab=wi"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://news.google.cz/nwshp?hl=cs&tab=wn"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://groups.google.cz/grphp?hl=cs&tab=wg"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://www.google.com/calendar/render?hl=cs&tab=wc"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://mail.google.com/mail/?hl=cs&tab=wm"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://www.google.cz/intl/cs/options/"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://picasaweb.google.cz/home?hl=cs&tab=wq"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://docs.google.com/?hl=cs&tab=wo"href="http://www.w.kx.cz/anonymizer.php?act=code&q=http://www.google.cz/reader/view/?hl=cs&tab=wy"

tim chci rict že to funguje... ale nenahradí se to...:( děkuju dopředu za budoucí pomoc :)

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
pawlik0
Grafoman
22. 6. 2008   #4
-
0
-

To nikdo neví?

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
bukaj0
Věrný člen
22. 6. 2008   #5
-
0
-

pawlik
Podle toho, co píšeš to vypadá na toto:

// funkce totiž neupravuje předaný řetězec, ale vrací nový upravený

$contents = preg_replace_callback("~(href|src|action)=\"(.*)\"~iU", "ad", $contents);

Nahlásit jako SPAM
IP: 212.116.219.–
Jak se správně ptát? -> http://www.hash.cz/inferno/otazky.html[br][br] Po programování je člověk hladovej.
pawlik0
Grafoman
23. 6. 2008   #6
-
0
-

To bukaj : omg moc děkuju. už to funguje. prostě ty nejhloupější chyby se hledaj nejdýl.
OT: možná někdo pamatuje na moji poslední neřešitelnou chybu kvůli <script type="text/css"> :smile14:

Nahlásit jako SPAM
IP: 89.176.203.–
Sa Nata A Na. Howgh
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 6 hostů

Podobná vlákna

Zapis IP adres — založil Tom

Absolutní hodnota — založil Polarski

Databáze adres — založil merobijec

Absolutní pozicování — založil spartan13

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý