Eine Delphi / Freepascal lib oder Funktion, die die Funktion parse_url PHP emuliert
-
02-07-2019 - |
Frage
Ich bin eine Sitemap Hersteller in Object Pascal tun und brauchen eine gute Funktion oder lib die parse_url Funktion auf PHP.
Kennt jemand irgendwelche guten?
Lösung
Freepascal hat das Gerät UriParser mit der ParseURI Funktion. Ein Beispiel, wie man es verwenden kann, in einem Beispiel, das in Freepascal der Quelle . Oder ein altes Beispiel die etwas leichter zu verstehen.
Andere Tipps
Ich bin nicht mit der parse_url Funktion auf PHP vertraut, aber Sie könnten die TIdURI Klasse, die mit enthalten ist Indy (der wiederum mit neuesten Delphi Versionen enthalten). Ich denke, dass sie es zu Freepascal portiert als auch.
TIdURI ist ein TObject Nachkomme, der eine Universal Resource Identifier verkapselt, wie im Internet Standard Dokument beschrieben:
TIdURI stellt Methoden und Eigenschaften für die Montage und Demontage von URIs die Bauteile verwenden, die die URI bilden, einschließlich:. Protokoll, Host, Port, Pfad, Dokument, und Lesezeichen
Wenn das nicht funktioniert, benutzen Sie bitte ein konkretes Beispiel für das, was Sie versuchen zu erreichen -. was Sie versuchen, aus einer URL zu analysieren
Seien Sie vorsichtig mit Indys TIdURI Klasse. Es sollte ein Allzweck-Parser sein, aber es hat ein paar Fehler und Design-Fehler darin, dass sie sich von einem vollständig konformen Parser verhindern. Ich bin derzeit in den Prozess für Indy 11 eine neue Klasse von Grund auf neu zu schreiben TIdURI zu ersetzen. Es wird ein vollständig konformer URI-Parser sein, und es wird auch IRI (RFC 3987) suppor als auch das Parsen.
Wenn Sie mit wininet.dll Sie auch ihre InternetCrackUrl API.
Der URI RFC diesen regulären Ausdruck für URI Parsing auflistet:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
Wo die Zahlen sind diese Gruppen:
$1 = http:
$2 = http
$3 = //www.ics.uci.edu
$4 = www.ics.uci.edu
$5 = /pub/ietf/uri/
$6 = <undefined>
$7 = <undefined>
$8 = #Related
$9 = Related
Für diesen URI:
http://www.ics.uci.edu/pub/ietf/uri/#Related
Der reguläre Ausdruck ist ziemlich einfach und verwendet keine Besonderheiten der reguläre Ausdruck lib zu bieten hat, so dass man greifen, die mit Ihrem pascal Implementierung kompatibel ist und los geht.