Tom: Zeichnsatz, RegExp

Hello,

ich habe da noch eine kleine Reparatur in einer alten Webseite vorzunehmen. Ein Witzbold hat dort wie folgenden ausgeführte Links eingestzt:

<A HREF="abdr&uuml;cken.html" OLDREF=" lexikon/a/abdr%FCcken.html">Abdr&uuml;cken</A></p>

Kann ich davon ausgehen, dass es "OLDREF" als Attribut nicht gibt und nicht gab?

Nun muss ich aber genau den rawurl-codierten Linktext wieder im HREF-Attribut haben. Dafür benötige ich mal etwas Unterstützung für den Aufbau der Hyperreferenz.

Es müssten also (vermutlich) in den über 1900 Dokumenten alle HREF ersetzt werden, die HTML-Entitäten enthalten, denn die dürfen nicht in der URL auftauchen...

Außerdem würde ich bei dieser Gelgenheit auch gleich das "OLDREF" entfernen wollen.

Harzliche Grüße aus http://www.annerschbarrich.de

Tom

--
Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
Nur selber lernen macht schlau
  1. Hi Tom,

    Kann ich davon ausgehen, dass es "OLDREF" als Attribut nicht gibt und nicht gab?

    Ja.

    Es müssten also (vermutlich) in den über 1900 Dokumenten alle HREF ersetzt werden, die HTML-Entitäten enthalten, denn die dürfen nicht in der URL auftauchen...

    Doch, dürfen sie.

    Live long and prosper,
    Gunnar

    --
    „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
    1. Hello,

      Es müssten also (vermutlich) in den über 1900 Dokumenten alle HREF ersetzt werden, die HTML-Entitäten enthalten, denn die dürfen nicht in der URL auftauchen...

      Doch, dürfen sie.

      Aber sie funktionieren nicht.
      Außerdem müsste das & ja codiert werden. Es ist schlielich Bestandteil der URL und nicht Steuerzeichen für den URi

      Liegt es vielleicht daran?

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Hi Tom,

        Außerdem müsste das & ja codiert werden.

        ?? Du willst die Ressource http://example.net/ä referenzieren?
        Das geht mit
          <a href="http://example.net/ä">
        genauso wie mit
          <a href="http://example.net/&auml;">

        Live long and prosper,
        Gunnar

        --
        „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
        1. Hello,

          Außerdem müsste das & ja codiert werden.

          ?? Du willst die Ressource http://example.net/ä referenzieren?
          Das geht mit
            <a href="http://example.net/ä">
          genauso wie mit
            <a href="http://example.net/&auml;">

          Genauso geht es... nämlich gar nicht!

          Das & ist ein Sinderzeichen, dass in URLs nix zu suchen hat. Es gehört in die URi, und zwar als Steuerzeichen für die Parameter-Segmentierung. Das ist aber Sache des jeweiligen Webservers.

          Mein Problem ist auch nicht, ob es unter bestimmten Umständen zulässig ist oder nicht. Ich will es schlichtweg nicht so haben und suche daher eine passende RegExp, die mir hilft, die betroffenen URLs umzuwandeln von Entities auf RawUrlEncoded Strings.

          Harzliche Grüße aus http://www.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          1. Das & ist ein Sinderzeichen, dass in URLs nix zu suchen hat.

            Tom,
            Mir ist dein Problem nicht ganz klar.

            Kommt "&" im Dateinamen der Ressource vor?

            Wenn ein "ä" im Dateinamen vorkommt, kannst du selbstverständlich im HTML-Quelltext <a href="http://example.net/&auml;"> schreiben. Das wird ja nicht so rausgeschickt; sondern der Browser wandelt &auml; in ä um, so dass "http://example.net/ä" rausgeschickt wird. Der Server bekommt überhaupt nicht mit, wie das "ä" im Quelltext steht.

            Live long and prosper,
            Gunnar

            --
            „Weisheit ist nicht das Ergebnis der Schulbildung, sondern des lebenslangen Versuchs, sie zu erwerben.“ (Albert Einstein)
            1. Hello,

              Wenn ein "ä" im Dateinamen vorkommt, kannst du selbstverständlich im HTML-Quelltext <a href="http://example.net/&auml;"> schreiben. Das wird ja nicht so rausgeschickt; sondern der Browser wandelt &auml; in ä um, so dass "http://example.net/ä" rausgeschickt wird. Der Server bekommt überhaupt nicht mit, wie das "ä" im Quelltext steht.

              Der Browser weigert sich aber in immer noch erheblicher Anzahl vertretener Exemplare, das 'ä' im Ressource-String überhaupt abzuschicken. Und deshalb muss es meiner Meinung nach mit rawurlencode() (PHP) behandelt werden.

              Jedenfalls funktioniren die so behandelten Links erwartungsgemäß einwandfrei, während die mit den Umlauten nicht funktionieren. Auch wenn der Browser den Request vermeintlich abschickt, erhalte ich nur einen 404er.

              Das mag dann wiederum am Server liegen. Vielleicht versickert die richtige Codierung ja aber auch auf der Strecke? Es ist mir zu müßig, sowas zu verfolgen, wenn man durch passende Codierung das Problem mit der Wurzel ausreißen kann.

              Gesucht sit also eine RegExp, die mir alle Vorkommen von "<a href="äöüß" ...> findet und daraus eine Hyperreferenz mit RawURL-Codiertem String macht.

              Das äöüß steht jetzt hier nur als Platzhalter für die verbotenen Zeichen und außerdem als Platzhalter für die HTML-codierten Zeichen, also &auml; &Auml; ...

              Die muss ich dann ja wohl erst wieder zurückverwandeln, um sie anschließend mit rawurlencode() behandeln zu lönnen.

              Als zweite Aufgabe ist noch das Entfernen von OLDREF=" ... " zu erledigen ;-)

              Da es sich um ca. 2000 Dokumente in Verzeichnissen und Unterverzeichnissen handelt, möchte ich das händisch erledigen.

              Harzliche Grüße aus http://www.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
    2. Hello,

      Es müssten also (vermutlich) in den über 1900 Dokumenten alle HREF ersetzt werden, die HTML-Entitäten enthalten, denn die dürfen nicht in der URL auftauchen...

      Doch, dürfen sie.

      http://www.domain.tld/lexikon/a/abk&amp;uuml;hld.html

      funktioniert nicht.
      Nur die rawurl-encodete Form funktioniert und das ist auch plausibel.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
  2. Hi,

    <A HREF="abdr&uuml;cken.html" OLDREF=" lexikon/a/abdr%FCcken.html">Abdr&uuml;cken</A></p>
    Kann ich davon ausgehen, dass es "OLDREF" als Attribut nicht gibt und nicht gab?

    Ja.

    Nun muss ich aber genau den rawurl-codierten Linktext wieder im HREF-Attribut haben. Dafür benötige ich mal etwas Unterstützung für den Aufbau der Hyperreferenz.
    Es müssten also (vermutlich) in den über 1900 Dokumenten alle HREF ersetzt werden, die HTML-Entitäten enthalten, denn die dürfen nicht in der URL auftauchen...

    Du willst also alles nach HREF=" weghaben bis zum Leerzeichen nach OLDREF="

    ==>
    /HREF=".*?OLDREF=" /
    durch href=" ersetzen.

    Oder soll das lexikon/a auch noch weg? Dann halt noch in den match mitreinnehmen.

    cu,
    Andreas

    --
    Warum nennt sich Andreas hier MudGuard?
    Schreinerei Waechter
    Fachfragen per E-Mail halte ich für unverschämt und werde entsprechende E-Mails nicht beantworten. Für Fachfragen ist das Forum da.
    1. Hello,

      Du willst also alles nach HREF=" weghaben bis zum Leerzeichen nach OLDREF="

      ==>
      /HREF=".*?OLDREF=" /
      durch href=" ersetzen.

      Oder soll das lexikon/a auch noch weg? Dann halt noch in den match mitreinnehmen.

      Das Problem ist, dass der einzig abgesicherte Link in HREF=" ... " drinsteht, aber eben leider oft mit der falschen Codierung. Ich müsste also feststellen, ob dort gültige HTML-Entities drinstehen, die rückkodieren und gegen RawUrlEndode() ersetzen.

      Den OLDREF kann ich dann vollständig entfernen.

      Was mir noch Schwierigkeiten bereitet, ist festzustellen, ob in der HREF eine HTML-Entität drinsteht oder nicht.

      Harzliche Grüße aus http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      1. Heißa, Tom,

        Was mir noch Schwierigkeiten bereitet, ist festzustellen, ob in der HREF eine HTML-Entität drinsteht oder nicht.

        Du musst das ja nicht alles mit einem preg_replace durchführen, oder? Ich würde an deiner Stelle erstmal mit preg_match_all alle Links heraussuchen und dann mit Stringfunktionen oder sonstwie jede Adresse einzeln auf gültige Entities überprüfen. Sollte sich eigentlich nicht so schwierig gestalten.

        Und dann wird dir sicherlich das e-Flag für preg_replace nützlich sein.

        Gautera!
        Grüße aus Biberach Riss,
        Candid Dauth

        --
        Ein Fußball-Fan? Noch auf der Suche eine Schlafmöglichkeit im Großraum Stuttgart für die WM 2006? Wie wäre es mit Herrenberg, einer gemütlichen Kleinstadt am Rande des Schönbuchs? – Von der Lage her ideal, auch für andere Vorhaben im Urlaub. Ferienwohnungen-Herrenberg.com.
        http://cdauth.de/