parsing uri 'er

, en hurtig og nem måde at analysere uri er set på kommercielle biblioteker, note: hvis du har en internet - bibliotek, så du har allerede uri parsing funktioner, men dette kan tjene som en alternativ måde, en kontrol af, hvordan parsing algoritme fungerer, en måde at bruge en kredit i henhold til artikel, en måde til at flamme, en anden kodning osv.,,,,,,, indy (internet - direkte) for uri parsing check, tiduri, klasse på iduri enhed, på turbopower internet professionelle for ipmisc enhed funktion, ipparseurl,,,, ikke ved, om dets om,,,,, en uri, er den måde, hvorpå en internet - adresse præsenterer sig selv de fleste protokoller, følge en uri.en uri har følgende syntaks:,,, [protokol +: //] vært [: havn] [subdirs] [dokument] [# + bogmærke.,,, så her er den måde, jeg kom for parsing uri, koden er kommenteret,,, < --------------------- begynde kode --------------------------- >,,, funktion isnumber (acharacter: char): boolean,,, begynder, resultat: = producentorganisationer (acharacter, 0123456789) > 0,,,,,,, {analysere params fra en url til en tstrings, f.eks. http://search.yahoo.com/bin/search?p=britney+spears,, Dest[0] = 'p=britney+spears',, To access params and values check TStringList.Names and,, TStringList.Values},, procedure SplitParams(const Params: String; Dest: TStrings);,, var,, p: Integer;,, Tmp: String;,, begin,, if not Assigned(Dest) then Exit;,,, Dest.Clear;,, Tmp := Params;,, p := Pos('&', Tmp);,,, while (p > 0) do,, begin,, Dest.Add(Copy(Tmp, 1, p -1));,, Tmp := Copy(Tmp, P+1, Length(Tmp) - p);,, p := Pos('&', Tmp);,, end;,, Dest.Add(Tmp);,, end;,,, {Given an URL check for a query, return the query starting,, position, and the params in Params, this function uses SplitParams},, procedure ProcessQuery(const URL: String; Params: TStrings; var QueryPos: Integer);,, begin, n - //alt efter?er params, så send dem til splitparams,, querypos: = producentorganisationer ("?, url), hvis querypos > 0,, splitparams (kopi (url, querypos + 1, længde (url) - querypos), params);,,,,,, (med en url - dokument navn, er der nogle særlige tilfælde:,, 1.) hvis url er i form http://www.hello.com er der noget dokument, men når spurgt til serveren, vil den igen, så vender tilbage, noget dokument, 2) hvis url er i form http://www.hi.com/index.php eller http: //www.hi. kom /index.php&#det eller http: //www.hi. kom /index.php&#det?howareyou=hacker,, then document is index.php forget anything else},, function QueryDocument(const URL: String; var DocPos: Integer): String;,, var,, QueryPos, i: Integer;,, begin,, Result := '';,, //check for parameters,, ProcessQuery(URL, nil, QueryPos);,, if (QueryPos > 0) then,, begin,, dec(QueryPos);,, i := QueryPos;,, while URL[QueryPos] <> '/' do dec(i);,, inc(i);, , , Result := Copy(URL, i +1, QueryPos);,, end,, else,, begin,, {QueryPos is not found try to get either a docname or,, check if no document at hand},, i := Length(URL);,, while URL[i] <> '/' do dec(i);,, inc(i);,, DocPos := i;,, if (i >= Pos('://', URL)+3) then,, Result := Copy(URL, i, Length(URL)),, else,, begin,, //No document or url of the form www.hello.com,, Result := '';,, Exit;,, end;,, end;,,, //check for any bookmarks in the document,, if Pos('#', Result) > 0 then,, Result := Copy(Result, 1, Pos('#', Result) -1);,, if pos('/', Result) >0 then,, Delete(Result, pos('/', Result), 1);,, end;,,, {Query the port number of a url if any,, EG. www.hello.com:8000,, QueryPort will return 8000 else it will return 0},, function QueryPort(const URL: String): Integer;,, var,, DotIdx, SlashIdx: Integer;,, Tmp, Buffer: String;,, begin,, Tmp := URL;,, if Pos('://', Tmp) > 0 then,, Delete(Tmp, Pos('://', Tmp), 3);,, SlashIdx := Pos('/', Tmp) -1;,, if SlashIdx < 0 then,, SlashIdx := Length(Tmp);,, DotIdx := Pos(':', Tmp);,, if DotIdx < 0 then,, //no Port Number so exit gracefully,, Exit;,, Buffer := Copy(Tmp, DotIdx+1, SlashIdx);,, val(Buffer, Result, DotIdx);,, end;,,, {Query a Bookmark in a document,, EG. www.hello.com/index.htm#notwelcome,, QueryBookMark will return 'notwelcome'},, function QueryBookmark(const URL: String): String;,, var,, HashPos: Integer;,, QuestionPos: Integer;,, begin,, HashPos:= Pos('#', URL);,, if (HashPos <= 0) then Exit;,, QuestionPos:= Pos('?', url), hvis (questionpos < = 0), og questionpos: = længde (url), resultat: = kopi (url, hashpos + 1, questionpos-1);,,,,,, procedure parseuri (denne uri: string, var vært, dokument, bogmærke. havn: string. queryparams: tstrings);,, var, querypos, docpos: heltal, begynder, processquery (uri, queryparams, querypos);,, bogmærke: = querybookmark (uri);,, havn: = inttostr (queryport (uri), dokument: = querydocument (uri, docpos);,, vært: = kopi (uri, 1, docpos - 1);,,,,, < --------------------- ende kode ----------------------------- >,,, ved den måde, hvorpå denne algoritme måde kan forlænges, udvidet osv., og jeg arbejder på det.ethvert forslag, kommentarer, kritik, smid en kommentar.,,,,,,,,, kendte programfejl: * ifølge nogle kilder pos funktion er ikke så hurtigt, som det burde være, og kan ikke anvendes til at vende snor positionering. ja, jeg ved, det ikke er den bedste algoritme for uri parsing, som dette skriftligt jeg arbejder på forbedringer, kode udvidelser osv.



Previous:
Next Page: