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]
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.
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;