Mit eregi_replace href erweitern
karlX
- php
0 tomgk0 quest0 Sven Rautenberg0 tomgk
1 suit
Hallo,
Ich möchte mit eregi_replace einen Link erweitern, also href um "http://xxx/yyy.php?link=" erweitern aber nicht das href von link-Tag sondern nur vom a-Tag!
z.B.:
Blabla <a href="http://www.bla.x">Got to</a> <link href="bla.css">
soll zu
Blabla <a href="http://xxx/yyy.php?link=http://www.bla.x">Got to</a> <link href="bla.css">
Hoffe ich habe mein Problem genug beschrieben.
lg
karlX
Hallo,
eregi_replace("(href=")(.*)(")",'href="www.tweb.at/?site=\2"',$myS[$loop])
(Aber nur für href algemein)
MfG
tomgk
Hi,
eregi_replace("(href=")(.*)(")",'href="www.tweb.at/?site=\2"',$myS[$loop])
Warum $myS[$loop]?
Moin!
eregi_replace("(href=")(.*)(")",'href="www.tweb.at/?site=\2"',$myS[$loop])
(Aber nur für href algemein)
Nein, deine Lösung ist falsch. Sie ist eben gerade nicht "allgemein".
- Sven Rautenberg
Hallo,
Warum? Meinst du wegen dem 3.Parameter?
oder was?
MfG
tomgk
Moin!
Warum? Meinst du wegen dem 3.Parameter?
oder was?
Wenn du erklärst, was du glaubst, dass dein dahingeworfener Codeschnipsel tun soll, erkläre ich dir, warum er für das hier gefragte Problem ungeeignet ist.
Es ist in diesem Forum - das sei nur so am Rande angemerkt - üblich, dass man einem Fragesteller nicht einfach kommentarlos ein Stück (wohlmöglich ungetesteten oder sonstwo ausgeschnittenen) Code vor die Nase setzt, in der Hoffnung, er möge sich ob dieser Gnade rasch wieder, aber in unendlicher Dankbarkeit verziehen. Das Ziel des Forums ist vielmehr, den Fragesteller durch die Diskussion und Behandlung des Problems im Thread zu eigenständigen Lösungsstrategien und Recherchestrategien in Primär- und Sekundärliteratur zu befähigen. "Die Energie des Verstehens" - die kann ich bei dir jedenfalls noch nicht feststellen.
- Sven Rautenberg
Hallo,
Ich möchte mit eregi_replace einen Link erweitern, also href um "http://xxx/yyy.php?link=" erweitern aber nicht das href von link-Tag sondern nur vom a-Tag!
z.B.:Blabla <a href="http://www.bla.x">Got to</a> <link href="bla.css">
soll zu
Blabla <a href="http://xxx/yyy.php?link=http://www.bla.x">Got to</a> <link href="bla.css">
Hoffe ich habe mein Problem genug beschrieben.
vorweg: bitte RFC 2606 abschnitt 3 ("Reserved Example Second Level Domain Names") lesen
ich rate jetzt mal ins blaue rein (mal abesehen davon, dass ein <link />-element niemals nach einem <a />-element stehen darf):
du willst sämtliche, in deiner ausgabe befindlichen externen links finden und entsprechend ersetzen um sie über ein (tracking-?)script laufen zu lassen oder um sie in einem schaufenster frame zu öffnen - was auch immer
zitat 1418 - vermutlich kommst du mit einer einfachen suchen/ersetzen-funktion aus, sofern du ordentlichen code hast
wenn du reguläre ausdrücke verwendest und mit php arbeitest, verwende immer die funktionen mit dem preg_-präfix, perl-kompatible syntax ist weiter verbreitet, leistungsfähiger (schneller und umfangreicher) und einfacher zu verstehen als posix-kompatible (erg-)
zur umsetzung ein allgemeiner hinweis
du willst NICHT, dass aus http://example.com folgendes wird http://example.org/out.php?link=http://example.com - ich nehme an, du willst eher dieses hier http://example.org/out.php?link=http%3a%2f%2fexample.com
da die url ein parameter für die variable link wird, sollte sie kontextspezifisch codiert werden - url_encode wird dir dabei helfen
zum regulären ausdruck:
überlege genau, was du tun willst - sprich welchem muster können die links entsprechen, die du finden und ersetzen willst
"alles mit http:// davor" hört sich einfach an, ist aber ein nicht zu triviales thema
du willst zb nicht das src-attribut von grafiken oder stylesheets verändern - usw
was ist mit anderen protokollen? ftp:// http:// gopher:// usw?
was ist mit links der eigenen domain? relativen urls?
schreibe einfach mal alles zusammen und beginne daras dann ein schema zu formen
die alternative ist wie gesagt
suche http:// ersetze durch /out.php?link=http:// - das erfüllt deine ursprüngliche anforderung, codiert den link aber nicht kontextspezifisch (ist also prinzipiell schon zum scheitern verurteilt) und benötigt KEINEN regulären ausdruck
Hallo,
ich rate jetzt mal ins blaue rein (mal abesehen davon, dass ein <link />-element niemals nach einem <a />-element stehen darf):
Hab damit gemein,t das nur Links geändert werden sollen.
wenn du reguläre ausdrücke verwendest und mit php arbeitest, verwende immer die funktionen mit dem preg_-präfix, perl-kompatible syntax ist weiter verbreitet, leistungsfähiger (schneller und umfangreicher) und einfacher zu verstehen als posix-kompatible (erg-)
zur umsetzung ein allgemeiner hinweis
du willst NICHT, dass aus http://example.com folgendes wird http://example.org/out.php?link=http://example.com - ich nehme an, du willst eher dieses hier http://example.org/out.php?link=http%3a%2f%2fexample.com
da die url ein parameter für die variable link wird, sollte sie kontextspezifisch codiert werden - url_encode wird dir dabei helfen
zum regulären ausdruck:
überlege genau, was du tun willst - sprich welchem muster können die links entsprechen, die du finden und ersetzen willst
Alle Links auser Links der eigenen Domain
du willst zb nicht das src-attribut von grafiken oder stylesheets verändern - usw
was ist mit anderen protokollen? ftp:// http:// gopher:// usw?
Solche Links sollten auch geändert werden.
was ist mit links der eigenen domain?
Sollten gleich bleiben.
relativen urls?
Solten in "http://example.com/link.php?link=relativeURL" geändert werden.
Zusammenfassent lässt sich sagen: im href-Attribut des a-Tags sollte "http//example.com/link.php?link=" eingefügt werden. Wenn möglich sollte auch url_encode verwendet werden.
MfG
karlX
überlege genau, was du tun willst - sprich welchem muster können die links entsprechen, die du finden und ersetzen willst
Alle Links auser Links der eigenen Domain
nein, du hast mich nicht ganz verstanden - ich meinte damit, du sollst aufschreiben, WAS (sprich welche muster) du finden und ersetzen musst, was du logisch ersetzen willst, hab ich schon verstanden
deine domain ist example.com
http://example.org/ ist ein externer verweis
/foo.php ist ein interner verweis
...
wenn du alle möglichkeiten hast(und da gibts einige), kannst du beginnen, daraus muster zu erkennen und zu bilden
zb "alle externen links beginnen defintiv mit "http://", nachdem aber auch ftp gewünscht ist, könnte das muster zb folgendermaßen zu erweitern: "(f|ht)tp://" usw
nach reichlicher überlegung ist aber auch http://example.com/foo.php ein interner verweis
erfasse all diese eventualitäten und schreibe sie dir auf - deine liste wird dadurch schätzungsweise an die 30 bis 50 "regeln" enthalten, die es dann gilt in ein muster zu verfrachten
Hallo,
Ich möchte den Link wie folgt erweitern:
1. Grundsätzlich sollte der Link nur mit "http://example.com/link.php?link=" erweitert werden.
2. Ist es ein interner Link sollte er nicht erweitert werden.
3. Es sollen nur Links mit den Protokolen HTTP, HTTPS und FTP erweitert werden.
4. Der Link sollte wenn möglich mit urlencode codiert werden.
Wenn möglich sollte der Link dannach so aussehen:
"http://example.com/link.php?protokol=protokol&host=hostname&link=restlicherLink&filetyp=dateiextension"
MFg
karlX
- Grundsätzlich sollte der Link nur mit "http://example.com/link.php?link=" erweitert werden.
wenn du das machst, funktionierts nicht mehr - das sage ich dir bereits - darum willst du
a) links erkennen
b) wenn sie spezifische muster erfüllen etwas davor setzen
c) die verweisziele kontextspezifisch codieren
- Ist es ein interner Link sollte er nicht erweitert werden.
sagtest du breits - doch ein interner link hat "viele gesichter"
- Es sollen nur Links mit den Protokolen HTTP, HTTPS und FTP erweitert werden.
auch das sagtest du bereits
- Der Link sollte wenn möglich mit urlencode codiert werden.
siehe 1c) - nicht wenn möglich sonder zwingend
Wenn möglich sollte der Link dannach so aussehen:
"http://example.com/link.php?protokol=protokol&host=hostname&link=restlicherLink&filetyp=dateiextension"
das ist neu
wie schon erwähnt, analysiere was du möchtest - im detail
was du theoretisch möchtest, hast du ja bereits dargelegt - jetzt gehts an die praxis
ein einziger regulärer ausdruck der all das erfüllt was du möchtest scheint mir etwas utopisch bzw unnötig kompliziert und unverständlich, bzw wenig flexibel/erweiterbar - beschränke dich auch teilbereiche deines problems
wie schon erwähnt eignet sich dafür preg_replace besser als die erg-funktionen - imho noch sinnvoller wäre preg_replace_callback
ich würde mit "finde mit einem regulären ausdrück den inhalt jedes href-attributs eines a-elements" beginnen
tu dieses und teile dann deine fortschritte mit bzw schildere, wo genau dein problem liegt