AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Delphi Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?
Thema durchsuchen
Ansicht
Themen-Optionen

Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?

Ein Thema von PeterPanino · begonnen am 27. Mär 2013 · letzter Beitrag vom 27. Mär 2013
Antwort Antwort
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#1

Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?

  Alt 27. Mär 2013, 02:16
Hallo! Ich habe von einem Webserver den Quellcode einer Webseite geholt und möchte darin alle relativen Referenzen in Linkattributen (href, src, ...) in absolute Referenzen umwandeln. Die lokal geöffnete HTML-Datei soll somit gleich aussehen (Bilder, Javascript, ...), wie wenn sie online vom Webserver geladen würde. Gibt es für diese Konvertierung schon fertige Bibliotheken für Delphi oder muss ich das alles selbst parsen und konvertieren?
  Mit Zitat antworten Zitat
Volker Z.

Registriert seit: 4. Dez 2012
Ort: Augsburg, Bayern, Süddeutschland
419 Beiträge
 
Delphi XE4 Ultimate
 
#2

AW: Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?

  Alt 27. Mär 2013, 06:27
Hallo,

es würde sich RegEx anbieten.

Delphi-Quellcode:
uses
   System.RegularExpressionsCore;

function RelativeToAbsolute (const Html, Path, Pattern : string) : string;
var
  r : TPerlRegEx;
begin
   r := TPerlRegEx.Create;
  try
    r.Subject := UTF8Encode (Html);
    r.Options := [preCaseLess];
    r.RegEx := Pattern;
    r.Replacement := UTF8string (Path);
    r.ReplaceAll;

    Result := string (r.Subject)
  finally
    FreeAndNil (r)
  end
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Memo2.Text := RelativeToAbsolute (Memo1.Text, '="www.mywebsite.de/', '="\.+\/?');
end;
würde ./, ../ oder belibig viele Punkte gefolgt von einen Slash ersetzen - sofern die Bedingung =".[.]/ erfüllt ist - mit ="www.mywebsite.de/[...].
Beispiel:
  • aus <a href="../test.htm">Linktext</a> würde <a href="www.mywebsite.de/test.htm">Linktext</a>
  • aus <img src="../test.jpg"> würde <img src="www.mywebsite.de/test.jpg">
  • hingegen bliebe <a href="../../test.htm">Linktext</a> unverändert, passt es doch nicht auf das Suchmuster

Wenn Deine relativen Pfad variieren, dann müsstest Du das nur entsprechend im Suchmuster entsprechend abbilden und es sollte es tun.
Volker Zeller
  Mit Zitat antworten Zitat
Namenloser

Registriert seit: 7. Jun 2006
Ort: Karlsruhe
3.724 Beiträge
 
FreePascal / Lazarus
 
#3

AW: Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?

  Alt 27. Mär 2013, 08:37
Da gibt es aber noch sehr viel mehr zu beachten. Z.B. kann vor und nach dem = Whitespace kommen, statt " können ' verwendet werden, oder die Attribute könne sogar in einer anderen Reihenfolge stehen, z.B. <a rel="nofollow" href="...">. Außerdem muss man bei sowas unbedingt non-greedy matchen! (Kann man auch, indem man im Regex statt . [^"] schreibt).

Je nachdem, was du erreichen willst, könnte eine sehr viel einfachere und robustere Lösung darin bestehen, einfach ganz oben folgendes in den <head>-Bereich einzufügen: <base href="http://example.com/" />
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#4

AW: Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?

  Alt 27. Mär 2013, 10:19
Da gibt es aber noch sehr viel mehr zu beachten. Z.B. kann vor und nach dem = Whitespace kommen, statt " können ' verwendet werden, oder die Attribute könne sogar in einer anderen Reihenfolge stehen, z.B. <a rel="nofollow" href="...">. Außerdem muss man bei sowas unbedingt non-greedy matchen! (Kann man auch, indem man im Regex statt . [^"] schreibt).

Je nachdem, was du erreichen willst, könnte eine sehr viel einfachere und robustere Lösung darin bestehen, einfach ganz oben folgendes in den <head>-Bereich einzufügen: <base href="http://example.com/" />
Dieser Tipp (<base href="http://example.com/" />) ist absolut genial, weil er einfach ist und alles abdeckt! Absolute Referenzen im HTML-Quellcode werden davon nicht berührt, nur relative Referenzen werden konvertiert! Vielen Dank!!!
  Mit Zitat antworten Zitat
PeterPanino

Registriert seit: 4. Sep 2004
1.465 Beiträge
 
Delphi 10.4 Sydney
 
#5

AW: Relative Referenzen in HTML-Quellcode in absolute Referenzen umwandeln?

  Alt 27. Mär 2013, 11:38
Da anscheinend IE6 (als offenbar einzige Browserversion) Probleme mit dem base-Tag hat, sollte man diesen evtl. mit einem conditional comment ergänzen:

<base href="http://example.com/en/"><!--[if lte IE 6]></base><![endif]-->
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:45 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz