PHP-val HTML oldal BODY részének kiszedése
Sziasztok!
A feladat a következő. Van egy oldal, ahol egy cikk adatbázisban van eltárolva. És szeretném, hogy a címm szerkesztője fel tudjon tölteni egy bárhol bármivel megszerkesztett html oldalt. Az a rész beg is van.
Csak az elejéről le kellene csapni minden felesleges dolgot, és csak a <body> </body> közötti részt kellene majd beleírni az sql-be.
Szóval addig kész vagyok, hogy egy stringben ott a file full tartalma.
Hogyan tovább? Van egy egyszerű ötletetek rá? preg_replace el próbálkozom épp most, de nem igazán vezet eredményre!
Üdv. Topi.
■ A feladat a következő. Van egy oldal, ahol egy cikk adatbázisban van eltárolva. És szeretném, hogy a címm szerkesztője fel tudjon tölteni egy bárhol bármivel megszerkesztett html oldalt. Az a rész beg is van.
Csak az elejéről le kellene csapni minden felesleges dolgot, és csak a <body> </body> közötti részt kellene majd beleírni az sql-be.
Szóval addig kész vagyok, hogy egy stringben ott a file full tartalma.
Hogyan tovább? Van egy egyszerű ötletetek rá? preg_replace el próbálkozom épp most, de nem igazán vezet eredményre!
Üdv. Topi.
Reguláris kifejezés
Üdv: Viktor
<Nincs cím>
$body = preg_replace('/(.*?)<body>/', '', $body);
$body = preg_replace('/<\/body>(.*)/', '', $body);
echo $body;
Üdvözlettel: Liebig Zsolt
SWEN INTERNET
Egyszerűbb megoldás
Az strpos-zal rákeresel a <body> sztringre, majd megkapod a pozícióját, ehhez hozzáadsz 6-ot. Ezek után ismét futtatsz egy strpos-t, ezúttal a </body> sztringet keresed meg. A második értékből kivonod az elsőt, majd a substr függvényt futtatod, első paraméterként az első strpos() értékét megadva, második értékként pedig az előbbi kivonás értékét beírva. Nagyjából ennyi.
A megoldás
Leírom:
A body kiszedéséhez:
A css kiszedéséhez:
Az a strpos - substr párossal próbálkoztam, de nem biztos hogy <body> van.. lehet hogy <body bgcolor="#000000"> és azt meg strpossal bonyi lenne.. Ezért adtam fel..
<Nincs cím>
Üdvözlettel: Liebig Zsolt
SWEN INTERNET
<Nincs cím>
$f = fopen("alma.html","r");
$html = fread($f,filesize("alma.html"));
fclose($f);
$sokchr = " a-zA-Z0-9=\"\r\n#();";
$body = "";
$tmp = preg_split("/(<body ([$sokchr]*)>)/i",$html);
if (count($tmp) > 1) {
$tmp = preg_split("/(<\/body>)/i",$tmp[1]);
$body = $tmp[0];
}
$style = "";
$tmp = preg_split("/(<style([$sokchr]*)type=\"text\/css\"([$sokchr]*)>)/i",$html);
if (count($tmp) > 1) {
$tmp = preg_split("/(<\/style>)/i",$tmp[1]);
$style = $tmp[0];
}
print (trim($body));
?>
Szerintem túlbonyolítottam, de nem tudom egyszerűbben megírni, és ez most megy!
A te változatodat is próbáltam, de valahogy nekem nem működött... Mit rontottam el?
<Nincs cím>
Üdvözlettel: Liebig Zsolt
SWEN INTERNET
<Nincs cím>
If this modifier is set, a dot metacharacter in the pattern matches all characters, including newlines. Without it, newlines are excluded. This modifier is equivalent to Perl's /s modifier. A negative class such as [^a] always matches a newline character, independent of the setting of this modifier.
http://hu.php.net/manual/hu/reference.pcre.pattern.modifiers.php
szóval ...'/(.*)<body(.*?)>(.*?)<\/body>(.*)/si'...
ui: programajánló : http://www.regexbuddy.com/
<Nincs cím>
Bocs, ezt el is felejtettem, mivel én minden formázást CSS-ből csinálok. Akkor tényleg célravezetőbb a regex.
<Nincs cím>
az is jó
egyébként nem csak formázás lehet a body elemben, hanem onload esemény is.
gex
a példa
(a colorer=php furcsán színezi a kódot)
OFF: colorer
Mivel PHP kódot pl. <?php és ?> nyitó/záró jelek közé kell tenni, a fenti algoritmust a PHP értelmező se fogja futtatni.