Warnung: file_put_contents(/home/www/web1/html/php_dev/test.txt) [function.file-put-contents]: failed to open stream: Permission denied in /home/www/web1/html/php_dev/sys/lib.activity.php (Zeile 58)
Vorlagen Parsen [Archiv] - PHP-Scripte PHP-Tutorials PHP-Jobs und vieles mehr
brauche Webseite ideal für Vereine und Firmen
- Ad -
php-resource




Archiv verlassen und diese Seite im Standarddesign anzeigen :
Vorlagen Parsen


 
maffy
02-05-2009, 18:03 
 
Hallo:

Ich erstelle mir gerade ein Reisetagebuch wo ich Vorlagen wie bei Wikipedia z.B. für besuchte Museen, Orte usw. einbauen möchte.

Ich bekomme aber folgenden Fehler:

Warning: preg_replace() [function.preg-replace]: Unknown modifier '/' on line 43

[CODE]

 
asp2php
02-05-2009, 18:30 
 
1. Lesen http://www.php-resource.de/forum/showthread.php?s=&threadid=50454 und Code umbrechen

2. Du muss den Delimiter so wählen, dass er selbst nicht im Ausdruck vor kommt.

 
onemorenerd
02-05-2009, 18:43 
 
2.1 ... oder alle Vorkommen des Delimiters in Ausdruck escapen.

 
fireweasel
02-05-2009, 23:10 
 
Original geschrieben von maffy
Warning: preg_replace() [function.preg-replace]: Unknown modifier '/' on line 43


//...
$muster = "/[Infobox Museum:($ifb_museum)]/i";
$str = preg_replace($muster, $museumoutput, $str);

}
// ...



Neben den Delimitern müssen auch bestimmte Zeichen, die eine Funktion in PCRE erfüllen, escaped werden. Die Funktion preg_quote() (http://php.net/manual/en/function.preg-quote.php) ist dein Freund:


// ...
// Aus der Zitatansicht kopieren, sonst fehlen Backslashes.
// Der komische Smiley-Code ist auch nicht von mir ...
$muster = '/\[Infobox Museum:('.
preg_quote($ifb_museum, '/') .
')\]/i';
// unter der Voraussetzung,
// dass die runden Klammern als Subpattern gewollt sind

$str = preg_replace($muster, $museumoutput, $str);
// ...

Außerdem würde ich auf doppelte Hochkommas als Begrenzer (http://de3.php.net/manual/en/language.types.string.php#language.types.string.syntax.double) beim Zusammenbauen eines PCRE-Strings verzichten. Das stiftet nur Verwirrung, was wie zu escapen ist.

 
maffy
03-05-2009, 10:34 
 
Hallo
Danke, so funktionier es.



$str ='
<p>Heute am 1 Tag waren wir im Museum XYZ in Musterdorf:</p>

[Infobox Museum:
| Name = MuseumXaZ
| Bild = MuseumXaZ.jpg
| Bildbeschreibung = Museum XaZ
| Ort = Musterdorf
| Art = Kunst
| Breitengrad = 00.00000
| Längengrad = 00.00000
| Region-ISO = DE
| Webseite = http://www.test.de
]

<p>Am zweiten Tag der Reise waren wir ( gähn ) schon wieder in einem
Museum:</p>

[Infobox Museum:
| Name = Antonius Museum
| Bild = MuseumAntonius.jpg
| Bildbeschreibung = Hier schmeißt einer Butter in die Ecke
| Ort = Musterdorf
| Art = Butterscheiße
| Breitengrad = 00.00000
| Längengrad = 00.00000
| Region-ISO = DE
| Webseite = http://www.test.de
]
';

preg_match_all("/\[Infobox Museum:(([^]]+))]/i", $str, $ifb_mus_fund);

foreach($ifb_mus_fund[2] as $ifb_museum) {

// Infobox trennen
$input = explode("|", $ifb_museum);

// Felder trennen
$museum_name = explode("=", $input[1]);
$museum_bild = explode("=", $input[2]);
$museum_bildtitel = explode("=", $input[3]);
$museum_ort = explode("=", $input[4]);
$museum_art = explode("=", $input[5]);
$museum_lat = explode("=", $input[6]);
$museum_lng = explode("=", $input[7]);
$museum_region = explode("=", $input[8]);
$museum_www = explode("=", $input[9]);

// Infobox ausgeben
$museumoutput = "<table border='1' cellpadding='2' cellspacing='2' width='45%' bgcolor='#A050A0'>";
$museumoutput .= "<tr><td>Name:</td> <td>".$museum_name[1]."</td></tr>";
$museumoutput .= "<tr><td>Bild:</td> <td>".$museum_bild[1]."</td></tr>";
$museumoutput .= "<tr><td>Bildtitel:</td> <td>".$museum_bildtitel[1]."</td></tr>";
$museumoutput .= "<tr><td>Ort:</td> <td>".$museum_ort[1]."</td></tr>";
$museumoutput .= "<tr><td>Art:</td> <td>".$museum_art[1]."</td></tr>";
$museumoutput .= "<tr><td>Breitengrad:</td> <td>".$museum_lat[1]."</td></tr>";
$museumoutput .= "<tr><td>Längengrad:</td> <td>".$museum_lng[1]."</td></tr>";
$museumoutput .= "<tr><td>Region:</td> <td>".$museum_region[1]."</td></tr>";
$museumoutput .= "<tr><td>Internet:</td> <td>".$museum_www[1]."</td></tr>";
$museumoutput .= "</table>";

//$muster = '/[Infobox Museum:($ifb_museum)]/i';

$muster = '/\[Infobox Museum:('. preg_quote($ifb_museum, '/') .')]/i';
$str = preg_replace($muster, $museumoutput, $str);
}

//print_r($ifb_mus_fund);
print $str;


Alle Zeitangaben in WEZ +2. Es ist jetzt 21:24 Uhr.