regex (preg_replace) (Opgelost)
Wim - 16/07/2007 16:29
Crew algemeen
Ik ben bezig aan een photoalbum maar heb me nooit verdiept in rexex, oa PHP.net: preg_replace .
Nu lees ik per foto een bestand uit (is snel genoeg, want alles wordt gecached!), en hier haal ik data uit. Een voorbeeld is dit bvb:
Citaat:
<title>Cat's having fun...</titel>
<description>Je wandelt naar den hof, en ge ziet uw kat daar zitten......*KLIK* foto :-)</description>
deze code gebruik ik, het bovenstaande bestand zit volledig in $content!
<?php
$title = preg_replace('!<title>(.*?)</title>!', "\\1", $content);
$description = preg_replace('!<description>(.*?)</description>!', "\\1", $content);
$tpl->assign('title', $title);
$tpl->assign('description', $description);
?>
<?php
$title = preg_replace ( '!<title>(.*?)</title>!' , "\\1 " , $content ) ; $description = preg_replace ( '!<description>(.*?)</description>!' , "\\1 " , $content ) ; $tpl -> assign ( 'title' , $title ) ;
$tpl -> assign ( 'description' , $description ) ;
?>
Het probleem, zowel bij $title als $description krijg ik telkens de volledige inhoud van $content. Iemand die dit kan oplossen?
6 antwoorden
Gesponsorde links
Stijn - 16/07/2007 16:50
PHP expert
$var = preg_replace(... , ... , $content); zal de gewijzigde inhoud niet opslaan in $var maar in $content . Dit kan je doen:
<?php
preg_replace('!<title>(.*?)</title>!', "\\1", $content);
$tpl->assign('title', $content);
preg_replace('!<description>(.*?)</description>!', "\\1", $content);
$tpl->assign('description', $content);
?>
<?php
$tpl -> assign ( 'title' , $content ) ;
preg_replace ( '!<description>(.*?)</description>!' , "\\1 " , $content ) ; $tpl -> assign ( 'description' , $content ) ;
?>
Wim - 16/07/2007 17:06
Crew algemeen
nog steeds hetzelfde probleem!
Stijn - 16/07/2007 17:10 (laatste wijziging 16/07/2007 17:13)
PHP expert
owja je regex is beetje verkeerd
<?php
preg_replace('!\<title\>(.*?)\<\/title\>!', "\\1", $content);
$tpl->assign('title', $content);
preg_replace('!\<description\>(.*?)\<\/description\>!', "\\1", $content);
$tpl->assign('description', $content);
?>
<?php
preg_replace ( '!\<title\>(.*?)\<\/title\>!' , "\\1 " , $content ) ; $tpl -> assign ( 'title' , $content ) ;
preg_replace ( '!\<description\>(.*?)\<\/description\>!' , "\\1 " , $content ) ; $tpl -> assign ( 'description' , $content ) ;
?>
edit:
Probeer dit eens:
<?php
$title = preg_replace('!\<title\>(.*?)\<\/title\>!', "\\1", $content);
$description = preg_replace('!\<description\>(.*?)\<\/description\>!', "\\1", $content);
$tpl->assign('title', $title);
$tpl->assign('description', $description);
?>
<?php
$title = preg_replace ( '!\<title\>(.*?)\<\/title\>!' , "\\1 " , $content ) ; $description = preg_replace ( '!\<description\>(.*?)\<\/description\>!' , "\\1 " , $content ) ; $tpl -> assign ( 'title' , $title ) ;
$tpl -> assign ( 'description' , $description ) ;
?>
Wim - 16/07/2007 17:45 (laatste wijziging 16/07/2007 18:05)
Crew algemeen
plain text gewoon, met een (onbelangrijke) .txt extentie.
het bestand wordt normaal trouwens met php aangemaakt!
EDIT:
wow, werkt super chill & easy!
+ zo'n bestand is met php ook nog makkelijk aan te maken!
solved
//EDIT2:
voor de geïnteresseerden, ik gebruik het nu zo:
<?php
if(is_file($dir.'/'.$photo.'.php'))
{
require_once($dir.'/'.$photo.'.php');
$xml = new SimpleXMLElement($xmlstr);
$tpl->assignGlobal('title', $xml->photo[0]->title);
$tpl->assignGlobal('description', $xml->photo[0]->description);
}
else
{
$tpl->assignGlobal('title', $photo);
$tpl->assignGlobal('description', '');
}
?>
<?php
if ( is_file ( $dir . '/' . $photo . '.php' ) ) {
require_once ( $dir . '/' . $photo . '.php' ) ;
$xml = new SimpleXMLElement( $xmlstr ) ;
$tpl -> assignGlobal ( 'title' , $xml -> photo [ 0 ] -> title ) ;
$tpl -> assignGlobal ( 'description' , $xml -> photo [ 0 ] -> description ) ;
}
else
{
$tpl -> assignGlobal ( 'title' , $photo ) ;
$tpl -> assignGlobal ( 'description' , '' ) ;
}
?>
Gesponsorde links
Dit onderwerp is gesloten .