Teilbereiche aus Quellcode ausschneiden
Pit Stop
- php
0 Blaubart
moin,
ich lese einen Quelltext bei mir ein.
Darin ändere und bearbeite ich diverse Parts und gebe ihn neu aus.
Jetzt möchte ich einen Part ändern, der eine wechselnde ID beinhaltet.
Bisher habe ich das mit str_replace gemacht.
Nun habe ich folgende Fragen:
1.) Kann ich mit Str_replace auch wg. der Id "wechselnde" Bereiche ändern?
(Die ID-Länge ist eigentlich immer gleich...)
2.) Welche Alternativen gibts? KOmme ich irgendwie mit preg_replace weiter?
3.) Hat einer einen anderen Ansatz für mich ?
Obiges habe ich schon mal auf die schnelle ohne Ergebnis ausprobiert.
Aber vielleicht hatte ich ja auch nen Fehler drin.
danke, gruß Pit Stop
Tach.
ich lese einen Quelltext bei mir ein.
Darin ändere und bearbeite ich diverse Parts und gebe ihn neu aus.Jetzt möchte ich einen Part ändern, der eine wechselnde ID beinhaltet.
Schreibst Du selbstmodifizierenden Code? ;)
1.) Kann ich mit Str_replace auch wg. der Id "wechselnde" Bereiche ändern?
(Die ID-Länge ist eigentlich immer gleich...)
Was genau meinst Du mit "wechselnde Bereiche"? Muß noch etwas anderes als die ID ersetzt werden? Ist die ID irgendwie eindeutig im Quelltext zu finden?
2.) Welche Alternativen gibts? KOmme ich irgendwie mit preg_replace weiter?
Wenn sich Dein Suchmuster nicht mit einem einfachen "ersetze feste Zeichenkette A durch Zeichenkette B" lösen läßt, möglicherweise. Allerdings hab ich momentan keine richtige Vorstellung davon, was genau Du machst bzw. machen möchtest. Daher ist es schwer, Dir irgendwelche Funktionen zu empfehlen ...
3.) Hat einer einen anderen Ansatz für mich ?
Ja. Packe den änderungsbedürftigen Programmteil in eine Funktion und übergib die Veränderlichen als Parameter. Somit kannst Du bei jedem Funktionsaufruf ganz problemlos festlegen, welche ID (oder was Du sonst noch änderst) "im Quelltext steht".
Ich habe einen Link, den ich ändern möchte/muß.
Dieser Link wird dynamisch generiert, daher die ID in dem Link.
Über str_replace komme ich dasher ja nicht weiter, weil ich ja keine feste Zeichenkette habe, sondern eine "wechselnde";-)
zu 3.) wie soll ich die ID ala Parameter übergeben?
vertseh nicht so ganz was Du mit diesem Tipp meinst...
Trotzdem schon ienmal danke!
Pit
Hi Pit!
Ich habe einen Link, den ich ändern möchte/muß.
Möchtest du das Ziel ändern?
Das steht im Attribut href zwischen zwei Double Quotes (").
Du benötigst strpos und dir von die schon erwähnte Funktion str_replace.
MfG H☼psel
(Hallo|Hi(ho)|Tag|Mahlzeit|Yo, Yo{2,3}) Pit Stop,
Ich habe einen Link, den ich ändern möchte/muß.
Dieser Link wird dynamisch generiert, daher die ID in dem Link.
Was willst du denn ändern: das id-Attribut oder bspw. das Linkziel (href-Attribut)?
Über str_replace komme ich dasher ja nicht weiter, weil ich ja keine feste Zeichenkette habe, sondern eine "wechselnde";-)
Klar kann dir da preg_replace() weiterhelfen. Nur wenn du damit noch nie zu tun hattest, dann musst du dich wohl oder übel in die Thematik [(Perl-kompatible) Reguläre Ausdrücke](file://localhost/e:/data/info-rsrc/webdev/php/php.net/www.php.net/manual/de/regexp.reference.php) einlesen ...
Für das Beispiel weiter unten brauchst mindestens Kenntnisse
zu 3.) wie soll ich die ID ala Parameter übergeben?
Für den Fall, dass du die URL im href-Attribut (das auf das id-Attribut folgt) ersetzen möchtest, etwa so:
function meine_ersetzungsfunktion(
$id, /// deine ID
$womit_ersetzen, /// die neue URL
$worin_ersetzen /// dein HTML-Quelltext
) {
// prüfung übergebener Werte auf Sinnhaftigkeit
...
// $womit_ersetzen muss "escaped" werden, falls $ oder \ drin vorkommen
...
return preg_replace(
'/(\s+id="'.preg_quote($id).'"\s+href=")[^"]*(")/',
'$1' . $womit_ersetzen . '$2',
$worin_ersetzen);
}
Das funktioniert aber nur dann wie gewünscht, wenn die ID nur einmal so im (HTML?-)Quelltext vorhanden ist. Das sollte zwar in validem HTML so sein, aber man weiß ja nie ... ;-) Probeweise kannst du dir das mit preg_match_all() bestätigen lassen:
if (preg_match_all('/\s+id="'.preg_quote($id).'"/', $wo_ersetzen, $treffer)) {
var_dump($treffer);
}
... oder in HTML:
if (preg_match_all('/\s+id="'.preg_quote($id).'"/', $wo_ersetzen, $treffer)) {
ob_start();
var_dump($treffer);
printf('<pre>%s</pre>', htmlspecialchars(ob_get_clean()));
}
MffG
EisFuX