Eine schnelle und einfache Möglichkeit, URNER zu analysieren, wie gesehen auf kommerzielle Bibliotheken
Hinweis: Wenn Sie eine Internet-Bibliothek haben verfügen Sie bereits über URI Analyse-Funktionen, aber dies als eine alternative Möglichkeit dienen kann, eine Überprüfung der Parse Funktionsweise des Algorithmus, eine Möglichkeit, verbringen einen Kredit-Artikel, ein Weg, um jemand anderes Codierung Flamme usw.
Überprüfen Sie auf Indy (Internet Direct) zum Analysieren von URI TIdURI Klasse IdURI Gerät
TurboPower Internet Professional für IpMisc Einheitsfunktion IpParseURL
Zu ICS weiß aber nicht
Ein URI ist die Art und Weise, die eine Internetadresse sich präsentiert, die meisten Protokolle Folgen eines URIs. Ein URI hat die folgende Syntax:
[PROTOKOLL + ://] HOST [: PORT] [SUBDIRS] [DOKUMENT] [#+ BOOKMARK]
Hier ist nun der Weg kam ich zum Parsen von URI, ist der Code kommentiert
<---------------------BEGIN CODE--------------------------->
Funktion IsNumber(ACharacter: Char): Boolean;
beginnen
Ergebnis: = Pos (Zeichen, '0123456789') > 0;
Ende;
{Parsen Sie Params von einer URL in einem TStrings
ZB. https://Search.yahoo.com/bin/search?p=Britney+Spears
Dest [0] = ' p = Britney + Stangen
Zugriff auf Params und Werte überprüfen TStringList.Names und
TStringList.Values}
Procedure SplitParams (const Params: String; Dest: TStrings);
var
p: Integer;
Tmp: String;
beginnen
Wenn nicht Assigned(Dest) dann Ausfahrt;
Dest.Clear;
Tmp: = Params;
p: = Pos ('&', Tmp);
während tun (p > 0)
beginnen
Dest.Add (Kopie (Tmp, 1, p -1));
Tmp: = Kopieren (Tmp, P + 1, Length(Tmp) - p);
p: = Pos ('&', Tmp);
Ende;
Dest.Add(Tmp);
Ende;
{Ein URL-Check für eine Abfrage, zurück die Abfrage starten
Position und die Params in Params, diese Funktion nutzt die SplitParams}
Procedure ProcessQuery (const URL: String; Params: TStrings; Var QueryPos: Integer);
beginnen
Alles andere nach der? sind, dass Params so an Splitparams senden
QueryPos: Pos = ('? ', URL);
Wenn QueryPos > 0 dann
SplitParams (kopieren (URL, QueryPos + 1, Length(URL) - QueryPos), Params);
Ende;
{Einer Get URL der Dokumentname gegeben
Es gibt einige Sonderfälle dazu:
1) ist URL der Form der https://www.hello.com es kein Dokument
aber bei Abfrage an den Server zurück, man also zurück
kein Dokument
2) Wenn die URL der Form der https://www.hi.com/index.php ist oder
https://www.Hi.com/index.php#thisis oder
https://www.Hi.com/index.php#thisis?HowAreYou=Hacker
dann Dokument index.php ist alles andere vergessen}
Funktion QueryDocument (const URL: String; Var DocPos: Integer): String;
var
QueryPos, i: Integer;
beginnen
Ergebnis: = '';
Kontrollkästchen für Parameter
ProcessQuery (URL, Nil, QueryPos);
Wenn (QueryPos > 0) dann
beginnen
Dec(QueryPos);
Ich: = QueryPos;
zwar URL [QueryPos] <> ' /' do dec(i);
Inc(i);
Ergebnis: = Kopieren (URL, ich + 1, QueryPos);
Ende
sonst
beginnen
{QueryPos findet man nicht versuchen, erhalten entweder ein DokName oder
Überprüfen Sie, ob kein Dokument griffbereit}
Ich: = Length(URL);
zwar URL [i] <> ' /' do dec(i);
Inc(i);
DocPos: = i;
Wenn (ich > = Pos (': / /', URL) + 3) dann
Ergebnis: = Kopieren (URL, i., Length(URL))
sonst
beginnen
Kein Dokument oder die Url der www.hello.com die form
Ergebnis: = '';
Ausfahrt;
Ende;
Ende;
Überprüfen Sie, ob alle Textmarken im Dokument
Wenn Pos ('#', Ergebnis) > 0 dann
Ergebnis: = Kopieren (Ergebnis 1, Pos ('#', Ergebnis)-1);
Wenn pos ('/', Ergebnis) > 0 dann
Löschen (Ergebnis, pos ('/', Ergebnis), 1);
Ende;
{Fragen Sie die Port-Nummer einer URL ab, falls vorhanden
ZB. www.Hello.com:8000
QueryPort kehren 8000 sonst zurück, 0}
Funktion QueryPort (const URL: String): Integer;
var
DotIdx, SlashIdx: Integer;
Tmp, Puffer: String;
beginnen
Tmp: = URL;
Wenn Pos (': / /', Tmp) > 0 dann
Löschen (Tmp, Pos (': / /', Tmp), 3);
SlashIdx: Pos = ('/', Tmp)-1;
Wenn SlashIdx < 0 dann
SlashIdx: = Length(Tmp);
DotIdx: Pos = (': ', Tmp);
Wenn DotIdx < 0 dann
keine Port-Nummer also beenden ordnungsgemäß
Ausfahrt;
Puffer: = Kopieren (Tmp, DotIdx + 1, SlashIdx);
Val (Puffer, Ergebnis, DotIdx);
Ende;
{Query eine Textmarke in einem Dokument
ZB. www.Hello.com/index.htm#notwelcome
QueryBookMark gibt zurück, 'Notwelcome'}
Funktion QueryBookmark (const URL: String): String;
var
HashPos: Integer;
QuestionPos: Integer;
beginnen
HashPos: = Pos ('#', URL);
Wenn (HashPos < = 0) then Exit;
QuestionPos: Pos = ('? ', URL);
Wenn (QuestionPos < = 0) dann
QuestionPos: = Length(URL);
Ergebnis: = Kopieren (URL, HashPos + 1, QuestionPos-1);
Ende;
Verfahren ParseURI (const URI: String; Var Host, Dokument, Lesezeichen, Port: String; QueryParams: TStrings);
var
QueryPos, DocPos: Integer;
beginnen
ProcessQuery (URI, QueryParams, QueryPos);
Lesezeichen: = QueryBookmark(URI);
Port: = IntTOStr(QueryPort(URI));
Dokument: = QueryDocument (URI, DocPos);
Host: = Kopieren (URI, 1,-1 DocPos);
Ende;
<---------------------END CODE----------------------------->
Übrigens dieser Algorithmus Weg kann erweitert werden, erweiterte, etc., und ich arbeite daran. Anregungen, Kommentare, Kritik, schreiben Sie einen Kommentar.
BEKANNTE BUGS:
* Nach einigen Quellen Pos ist die Funktion nicht so schnell, wie es sein sollte und nicht werden, für die umgekehrte Zeichenfolge Positionierung verwendet kann
* Ja ich weiß das ist nicht des besten Algorithmus zum Parsen von URI, wie dieses Schreibens arbeite ich an Verbesserungen heraus, code-Erweiterungen etc..
Analyse der Urner
Analyse der Urner : Mehreren tausend Tipps, um Ihr Leben einfacher machen.
Eine schnelle und einfache Möglichkeit, URNER zu analysieren, wie gesehen auf kommerzielle Bibliotheken
Hinweis: Wenn Sie eine Internet-Bibliothek haben verfügen Sie bereits über URI Analyse-Funktionen, aber dies als eine alternative Möglichkeit dienen kann, eine Überprüfung der Parse Funktionsweise des Algorithmus, eine Möglichkeit, verbringen einen Kredit-Artikel, ein Weg, um jemand anderes Codierung Flamme usw.
Überprüfen Sie auf Indy (Internet Direct) zum Analysieren von URI TIdURI Klasse IdURI Gerät
TurboPower Internet Professional für IpMisc Einheitsfunktion IpParseURL
Zu ICS weiß aber nicht
Ein URI ist die Art und Weise, die eine Internetadresse sich präsentiert, die meisten Protokolle Folgen eines URIs. Ein URI hat die folgende Syntax:
[PROTOKOLL + ://] HOST [: PORT] [SUBDIRS] [DOKUMENT] [#+ BOOKMARK]
Hier ist nun der Weg kam ich zum Parsen von URI, ist der Code kommentiert
<---------------------BEGIN CODE--------------------------->
Funktion IsNumber(ACharacter: Char): Boolean;
beginnen
Ergebnis: = Pos (Zeichen, '0123456789') > 0;
Ende;
{Parsen Sie Params von einer URL in einem TStrings
ZB. https://Search.yahoo.com/bin/search?p=Britney+Spears
Dest [0] = ' p = Britney + Stangen
Zugriff auf Params und Werte überprüfen TStringList.Names und
TStringList.Values}
Procedure SplitParams (const Params: String; Dest: TStrings);
var
p: Integer;
Tmp: String;
beginnen
Wenn nicht Assigned(Dest) dann Ausfahrt;
Dest.Clear;
Tmp: = Params;
p: = Pos ('&', Tmp);
während tun (p > 0)
beginnen
Dest.Add (Kopie (Tmp, 1, p -1));
Tmp: = Kopieren (Tmp, P + 1, Length(Tmp) - p);
p: = Pos ('&', Tmp);
Ende;
Dest.Add(Tmp);
Ende;
{Ein URL-Check für eine Abfrage, zurück die Abfrage starten
Position und die Params in Params, diese Funktion nutzt die SplitParams}
Procedure ProcessQuery (const URL: String; Params: TStrings; Var QueryPos: Integer);
beginnen
Alles andere nach der? sind, dass Params so an Splitparams senden
QueryPos: Pos = ('? ', URL);
Wenn QueryPos > 0 dann
SplitParams (kopieren (URL, QueryPos + 1, Length(URL) - QueryPos), Params);
Ende;
{Einer Get URL der Dokumentname gegeben
Es gibt einige Sonderfälle dazu:
1) ist URL der Form der https://www.hello.com es kein Dokument
aber bei Abfrage an den Server zurück, man also zurück
kein Dokument
2) Wenn die URL der Form der https://www.hi.com/index.php ist oder
https://www.Hi.com/index.php#thisis oder
https://www.Hi.com/index.php#thisis?HowAreYou=Hacker
dann Dokument index.php ist alles andere vergessen}
Funktion QueryDocument (const URL: String; Var DocPos: Integer): String;
var
QueryPos, i: Integer;
beginnen
Ergebnis: = '';
Kontrollkästchen für Parameter
ProcessQuery (URL, Nil, QueryPos);
Wenn (QueryPos > 0) dann
beginnen
Dec(QueryPos);
Ich: = QueryPos;
zwar URL [QueryPos] <> ' /' do dec(i);
Inc(i);
Ergebnis: = Kopieren (URL, ich + 1, QueryPos);
Ende
sonst
beginnen
{QueryPos findet man nicht versuchen, erhalten entweder ein DokName oder
Überprüfen Sie, ob kein Dokument griffbereit}
Ich: = Length(URL);
zwar URL [i] <> ' /' do dec(i);
Inc(i);
DocPos: = i;
Wenn (ich > = Pos (': / /', URL) + 3) dann
Ergebnis: = Kopieren (URL, i., Length(URL))
sonst
beginnen
Kein Dokument oder die Url der www.hello.com die form
Ergebnis: = '';
Ausfahrt;
Ende;
Ende;
Überprüfen Sie, ob alle Textmarken im Dokument
Wenn Pos ('#', Ergebnis) > 0 dann
Ergebnis: = Kopieren (Ergebnis 1, Pos ('#', Ergebnis)-1);
Wenn pos ('/', Ergebnis) > 0 dann
Löschen (Ergebnis, pos ('/', Ergebnis), 1);
Ende;
{Fragen Sie die Port-Nummer einer URL ab, falls vorhanden
ZB. www.Hello.com:8000
QueryPort kehren 8000 sonst zurück, 0}
Funktion QueryPort (const URL: String): Integer;
var
DotIdx, SlashIdx: Integer;
Tmp, Puffer: String;
beginnen
Tmp: = URL;
Wenn Pos (': / /', Tmp) > 0 dann
Löschen (Tmp, Pos (': / /', Tmp), 3);
SlashIdx: Pos = ('/', Tmp)-1;
Wenn SlashIdx < 0 dann
SlashIdx: = Length(Tmp);
DotIdx: Pos = (': ', Tmp);
Wenn DotIdx < 0 dann
keine Port-Nummer also beenden ordnungsgemäß
Ausfahrt;
Puffer: = Kopieren (Tmp, DotIdx + 1, SlashIdx);
Val (Puffer, Ergebnis, DotIdx);
Ende;
{Query eine Textmarke in einem Dokument
ZB. www.Hello.com/index.htm#notwelcome
QueryBookMark gibt zurück, 'Notwelcome'}
Funktion QueryBookmark (const URL: String): String;
var
HashPos: Integer;
QuestionPos: Integer;
beginnen
HashPos: = Pos ('#', URL);
Wenn (HashPos < = 0) then Exit;
QuestionPos: Pos = ('? ', URL);
Wenn (QuestionPos < = 0) dann
QuestionPos: = Length(URL);
Ergebnis: = Kopieren (URL, HashPos + 1, QuestionPos-1);
Ende;
Verfahren ParseURI (const URI: String; Var Host, Dokument, Lesezeichen, Port: String; QueryParams: TStrings);
var
QueryPos, DocPos: Integer;
beginnen
ProcessQuery (URI, QueryParams, QueryPos);
Lesezeichen: = QueryBookmark(URI);
Port: = IntTOStr(QueryPort(URI));
Dokument: = QueryDocument (URI, DocPos);
Host: = Kopieren (URI, 1,-1 DocPos);
Ende;
<---------------------END CODE----------------------------->
Übrigens dieser Algorithmus Weg kann erweitert werden, erweiterte, etc., und ich arbeite daran. Anregungen, Kommentare, Kritik, schreiben Sie einen Kommentar.
BEKANNTE BUGS:
* Nach einigen Quellen Pos ist die Funktion nicht so schnell, wie es sein sollte und nicht werden, für die umgekehrte Zeichenfolge Positionierung verwendet kann
* Ja ich weiß das ist nicht des besten Algorithmus zum Parsen von URI, wie dieses Schreibens arbeite ich an Verbesserungen heraus, code-Erweiterungen etc..