karlX: Mit eregi_replace href erweitern

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

  1. Hallo,

    eregi_replace("(href=")(.*)(")",'href="www.tweb.at/?site=\2"',$myS[$loop])

    (Aber nur für href algemein)

    MfG
    tomgk

    1. Hi,

      eregi_replace("(href=")(.*)(")",'href="www.tweb.at/?site=\2"',$myS[$loop])

      Warum $myS[$loop]?

    2. 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

      --
      "Love your nation - respect the others."
      1. Hallo,

        Warum? Meinst du wegen dem 3.Parameter?
        oder was?

        MfG
        tomgk

        1. 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

          --
          "Love your nation - respect the others."
  2. 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

    1. 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

      1. ü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

        1. 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

            1. 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

            1. Ist es ein interner Link sollte er nicht erweitert werden.

            sagtest du breits - doch ein interner link hat "viele gesichter"

            1. Es sollen nur Links mit den Protokolen HTTP, HTTPS und FTP erweitert werden.

            auch das sagtest du bereits

            1. 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