L'analyse d'uri


Un moyen rapide et facile pour analyser URI comme on le voit sur les bibliothèques commerciales
REMARQUE: si vous avez une bibliothèque sur Internet alors que vous avez déjà URI analyse des fonctions, ce qui peut servir comme une alternative, un contrôle sur la façon dont l'algorithme d'analyse d'œuvres, une façon de passer un crédit de l'article, un moyen de flamme quelqu'un d'autre codage, etc
sur Indy(Internet Direct) pour URI analyse case TIdURI classe sur idURI unité
sur TurboPower Internet Professionnel pour IpMisc unité de fonction IpParseURL
Ne sais pas sur ICS si

UN URI est de cette manière qu'une adresse internet se présente, la plupart des protocoles de suivre une URI. Un URI a la syntaxe suivante:
[PROTOCOLE ://]de l'HÔTE[:PORT][sous-dossiers][DOCUMENT][# SIGNET]
Maintenant, voici la façon dont je suis venu pour URI de l'analyse, le code est commenté
< & & & & & & & & & & -COMMENCER à CODE & & & & & & & & & & & & & ->
fonction de IsNumber(ACharacter: Char): Boolean
begin
& nbsp & nbsp Résultat := Pos(ACharacter, '0123456789') > 0
fin
{Analyser les paramètres à partir d'une URL dans un TStrings
& nbsp EG. http://search.yahoo.com/bin/search?p=britney spears
& nbsp Dest[0] = 'p=britney spears'
& nbsp Pour accéder aux paramètres et valeurs de vérifier TStringList.Les noms et les
& nbsp TStringList.Les valeurs}
procédure SplitParams(const Params: String Dest: TStrings)
var
& nbsp & nbsp p: Integer
& nbsp & nbsp Tmp: String
begin
& nbsp & nbsp si non Affecté(Dest), puis la Sortie
& nbsp & nbsp Dest.Clair
& nbsp & nbsp Tmp := Params
& nbsp & nbsp p := Pos(' & ', Tmp)
& nbsp & nbsp while (p > 0) do
& nbsp & nbsp commencer
& ! & ! & ! & nbsp Dest.Ajouter(Copie(Tmp, 1, p -1))
& ! & ! & ! & nbsp Tmp := Copy(Tmp, P 1, Longueur(Tmp) - p)
& ! & ! & ! & nbsp p := Pos(' & ', Tmp)
& nbsp & nbsp fin
& nbsp & nbsp Dest.Ajouter(Tmp)
fin
{Donné une URL à vérifier pour une requête, de retour de la requête de départ
& nbsp position, et les paramètres dans les Paramètres, cette fonction utilise SplitParams}
procédure ProcessQuery(const URL: String Params: TStrings var QueryPos: Entier)
begin
& nbsp & nbsp //Tout ce qui suit ? sont params afin de les envoyer à splitparams
& nbsp & nbsp QueryPos := Pos('?', URL)
& nbsp & nbsp si QueryPos > 0, alors
& ! & ! & ! & nbsp SplitParams(Copie(URL, QueryPos 1, Longueur(URL) -QueryPos), Params)
fin
{Donné une URL d'obtenir le nom du document
& nbsp il existe quelques cas particuliers à ceci:
& nbsp & nbsp 1) si l'URL est de la forme http://www.hello.com il n'existe pas de document
& ! & ! & ! & ! & nbsp mais lorsqu'il est interrogé sur le serveur, il sera de retour, si retour
& ! & ! & ! & ! & nbsp aucun document
& nbsp & nbsp 2) si l'URL est de la forme http://www.hi.com/index.php ou
& ! & ! & ! & ! & nbsp http://www.hi.com/index.php#thisis ou
& ! & ! & ! & ! & nbsp http://www.hi.com/index.php#c'est?howareyou=pirate
& ! & ! & ! & ! & nbsp puis le document est index.php oublier quoi que ce soit d'autre}
fonction de QueryDocument(const URL: String var DocPos: Integer): String
var
& nbsp & nbsp QueryPos, i: Integer
begin
& nbsp & nbsp Résultat := '
& nbsp & nbsp //vérifier les paramètres
& nbsp & nbsp ProcessQuery(URL, néant, QueryPos)
& nbsp & nbsp si (QueryPos > 0),
& nbsp & nbsp commencer
& ! & ! & ! & nbsp dec(QueryPos)
& ! & ! & ! & nbsp j' := QueryPos
& ! & ! & ! & nbsp alors que l'URL[QueryPos] <> '/' ne dec(i)
& ! & ! & ! & nbsp inc(i)

& ! & ! & ! & nbsp Résultat := Copy(URL, i 1, QueryPos)
& nbsp & nbsp fin
& nbsp & nbsp else
& nbsp & nbsp commencer
& ! & ! & ! & nbsp {QueryPos n'est pas trouvé, essayez d'obtenir un docname ou
& ! & ! & ! & ! & nbsp vérifier si aucun document à la main}
& ! & ! & ! & ! i := Longueur(URL)
& ! & ! & ! & nbsp alors que l'URL[i] <> '/' ne dec(i)
& ! & ! & ! & nbsp inc(i)
& ! & ! & ! & nbsp DocPos := i
& ! & ! & ! & nbsp if (i >= Pos('://', URL) 3) puis
& ! & ! & ! & ! & ! & nbsp Résultat := Copy(URL, j', Longueur(URL))
& ! & ! & ! & nbsp else
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp //No de document ou d'une url de la forme www.hello.com
& ! & ! & ! & ! & ! & nbsp Résultat := '
& ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
& nbsp & nbsp //vérifier les signets dans le document
& nbsp & nbsp si Pos('#', Result) > 0, alors
& ! & ! & ! & nbsp Résultat := Copy(Résultat, 1, Pos('#', Result) -1)
& nbsp & nbsp si pos('/', Result) >0, alors
& ! & ! & ! & nbsp Supprimer(Résultat, pos ('/',), 1)
fin
{Requête le numéro de port de l'url si tout
& nbsp EG. www.hello.com:8000
& nbsp QueryPort sera de retour 8000 sinon, il sera de retour 0}
fonction de QueryPort(const URL: String): Integer
var
& nbsp & nbsp DotIdx, SlashIdx: Integer
& nbsp & nbsp Tmp, mémoire Tampon: String
begin
& nbsp & nbsp Tmp := URL
& nbsp & nbsp si Pos('://', Tmp) > 0, alors
& ! & ! & ! & nbsp Supprimer(Tmp, Pos('://', Tmp), 3)
& nbsp & nbsp SlashIdx := Pos('/', Tmp) -1
& nbsp & nbsp si SlashIdx < 0 alors
& ! & ! & ! & nbsp SlashIdx := Longueur(Tmp)
& nbsp & nbsp DotIdx := Pos(':', Tmp)
& nbsp & nbsp si DotIdx < 0 alors
& nbsp & nbsp // aucun Numéro de Port n'donc exit gracieusement
& ! & ! & ! & nbsp Sortie
& nbsp & nbsp Tampon := Copy(Tmp, DotIdx 1, SlashIdx)
& nbsp & nbsp val(Tampon, Résultat, DotIdx)
fin
{Requête d'un Signet dans un document
& nbsp EG. www.hello.com/index.htm#notwelcome
& nbsp QueryBookMark sera de retour 'notwelcome'}
fonction de QueryBookmark(const URL: String): String
var
& nbsp & nbsp HashPos: Integer
& nbsp & nbsp QuestionPos: Integer
begin
& nbsp & nbsp HashPos:= Pos('#', URL)
& nbsp & nbsp si (HashPos <= 0) puis la Sortie
& nbsp & nbsp QuestionPos:= Pos('?', URL)
& nbsp & nbsp si (QuestionPos <= 0) then
& ! & ! & ! & nbsp QuestionPos := Longueur(URL)
& nbsp & nbsp Résultat := Copy(URL, HashPos 1, QuestionPos-1)
fin
procédure ParseURI(const URI: String var Hôte, Document, Signet, Port: String QueryParams: TStrings)
var
& nbsp & nbsp QueryPos, DocPos: Integer
begin
& nbsp & nbsp ProcessQuery(URI, QueryParams, QueryPos)
& nbsp & nbsp Signet := QueryBookmark(URI)
& nbsp & nbsp Port := IntTOStr(QueryPort(URI))
& nbsp & nbsp Document := QueryDocument(URI, DocPos)
& nbsp & nbsp Hôte := Copie(URI, 1, DocPos -1)
fin
< & & & & & & & & & & -le CODE de FIN & & & & & & & & & & & & & & ->
Par le moyen de cet algorithme peut être étendu, élargi, etc., et je suis en train de travailler sur elle. Des suggestions, des commentaires, des critiques, déposer un commentaire.
les BUGS CONNUS:
& nbsp & nbsp * Selon certaines sources, le Pos n'est pas aussi rapide comme il se doit et ne peut pas être utilisé pour inverser la chaîne de positionnement
& nbsp & nbsp * Oui je sais ce n'est pas le meilleur algorithme pour l'URI de l'analyse, de cette écriture, je travaille sur des améliorations de code agrandissements etc.









L'analyse d'uri


L'analyse d'uri : Plusieurs milliers de conseils pour vous faciliter la vie.


Un moyen rapide et facile pour analyser URI comme on le voit sur les bibliotheques commerciales
REMARQUE: si vous avez une bibliotheque sur Internet alors que vous avez deja URI analyse des fonctions, ce qui peut servir comme une alternative, un controle sur la façon dont l'algorithme d'analyse d'œuvres, une façon de passer un credit de l'article, un moyen de flamme quelqu'un d'autre codage, etc
sur Indy(Internet Direct) pour URI analyse case TIdURI classe sur idURI unite
sur TurboPower Internet Professionnel pour IpMisc unite de fonction IpParseURL
Ne sais pas sur ICS si

UN URI est de cette maniere qu'une adresse internet se presente, la plupart des protocoles de suivre une URI. Un URI a la syntaxe suivante:
[PROTOCOLE ://]de l'HOTE[:PORT][sous-dossiers][DOCUMENT][# SIGNET]
Maintenant, voici la façon dont je suis venu pour URI de l'analyse, le code est commente
< & & & & & & & & & & -COMMENCER a CODE & & & & & & & & & & & & & ->
fonction de IsNumber(ACharacter: Char): Boolean
begin
& nbsp & nbsp Resultat := Pos(ACharacter, '0123456789') > 0
fin
{Analyser les parametres a partir d'une URL dans un TStrings
& nbsp EG. http://search.yahoo.com/bin/search?p=britney spears
& nbsp Dest[0] = 'p=britney spears'
& nbsp Pour acceder aux parametres et valeurs de verifier TStringList.Les noms et les
& nbsp TStringList.Les valeurs}
procedure SplitParams(const Params: String Dest: TStrings)
var
& nbsp & nbsp p: Integer
& nbsp & nbsp Tmp: String
begin
& nbsp & nbsp si non Affecte(Dest), puis la Sortie
& nbsp & nbsp Dest.Clair
& nbsp & nbsp Tmp := Params
& nbsp & nbsp p := Pos(' & ', Tmp)
& nbsp & nbsp while (p > 0) do
& nbsp & nbsp commencer
& ! & ! & ! & nbsp Dest.Ajouter(Copie(Tmp, 1, p -1))
& ! & ! & ! & nbsp Tmp := Copy(Tmp, P 1, Longueur(Tmp) - p)
& ! & ! & ! & nbsp p := Pos(' & ', Tmp)
& nbsp & nbsp fin
& nbsp & nbsp Dest.Ajouter(Tmp)
fin
{Donne une URL a verifier pour une requete, de retour de la requete de depart
& nbsp position, et les parametres dans les Parametres, cette fonction utilise SplitParams}
procedure ProcessQuery(const URL: String Params: TStrings var QueryPos: Entier)
begin
& nbsp & nbsp //Tout ce qui suit ? sont params afin de les envoyer a splitparams
& nbsp & nbsp QueryPos := Pos('?', URL)
& nbsp & nbsp si QueryPos > 0, alors
& ! & ! & ! & nbsp SplitParams(Copie(URL, QueryPos 1, Longueur(URL) -QueryPos), Params)
fin
{Donne une URL d'obtenir le nom du document
& nbsp il existe quelques cas particuliers a ceci:
& nbsp & nbsp 1) si l'URL est de la forme http://www.hello.com il n'existe pas de document
& ! & ! & ! & ! & nbsp mais lorsqu'il est interroge sur le serveur, il sera de retour, si retour
& ! & ! & ! & ! & nbsp aucun document
& nbsp & nbsp 2) si l'URL est de la forme http://www.hi.com/index.php ou
& ! & ! & ! & ! & nbsp http://www.hi.com/index.php#thisis ou
& ! & ! & ! & ! & nbsp http://www.hi.com/index.php#c'est?howareyou=pirate
& ! & ! & ! & ! & nbsp puis le document est index.php oublier quoi que ce soit d'autre}
fonction de QueryDocument(const URL: String var DocPos: Integer): String
var
& nbsp & nbsp QueryPos, i: Integer
begin
& nbsp & nbsp Resultat := '
& nbsp & nbsp //verifier les parametres
& nbsp & nbsp ProcessQuery(URL, neant, QueryPos)
& nbsp & nbsp si (QueryPos > 0),
& nbsp & nbsp commencer
& ! & ! & ! & nbsp dec(QueryPos)
& ! & ! & ! & nbsp j' := QueryPos
& ! & ! & ! & nbsp alors que l'URL[QueryPos] <> '/' ne dec(i)
& ! & ! & ! & nbsp inc(i)

& ! & ! & ! & nbsp Resultat := Copy(URL, i 1, QueryPos)
& nbsp & nbsp fin
& nbsp & nbsp else
& nbsp & nbsp commencer
& ! & ! & ! & nbsp {QueryPos n'est pas trouve, essayez d'obtenir un docname ou
& ! & ! & ! & ! & nbsp verifier si aucun document a la main}
& ! & ! & ! & ! i := Longueur(URL)
& ! & ! & ! & nbsp alors que l'URL[i] <> '/' ne dec(i)
& ! & ! & ! & nbsp inc(i)
& ! & ! & ! & nbsp DocPos := i
& ! & ! & ! & nbsp if (i >= Pos('://', URL) 3) puis
& ! & ! & ! & ! & ! & nbsp Resultat := Copy(URL, j', Longueur(URL))
& ! & ! & ! & nbsp else
& ! & ! & ! & nbsp commencer
& ! & ! & ! & ! & ! & nbsp //No de document ou d'une url de la forme www.hello.com
& ! & ! & ! & ! & ! & nbsp Resultat := '
& ! & ! & ! & ! & ! & nbsp Sortie
& ! & ! & ! & nbsp fin
& nbsp & nbsp fin
& nbsp & nbsp //verifier les signets dans le document
& nbsp & nbsp si Pos('#', Result) > 0, alors
& ! & ! & ! & nbsp Resultat := Copy(Resultat, 1, Pos('#', Result) -1)
& nbsp & nbsp si pos('/', Result) >0, alors
& ! & ! & ! & nbsp Supprimer(Resultat, pos ('/',), 1)
fin
{Requete le numero de port de l'url si tout
& nbsp EG. www.hello.com:8000
& nbsp QueryPort sera de retour 8000 sinon, il sera de retour 0}
fonction de QueryPort(const URL: String): Integer
var
& nbsp & nbsp DotIdx, SlashIdx: Integer
& nbsp & nbsp Tmp, memoire Tampon: String
begin
& nbsp & nbsp Tmp := URL
& nbsp & nbsp si Pos('://', Tmp) > 0, alors
& ! & ! & ! & nbsp Supprimer(Tmp, Pos('://', Tmp), 3)
& nbsp & nbsp SlashIdx := Pos('/', Tmp) -1
& nbsp & nbsp si SlashIdx < 0 alors
& ! & ! & ! & nbsp SlashIdx := Longueur(Tmp)
& nbsp & nbsp DotIdx := Pos(':', Tmp)
& nbsp & nbsp si DotIdx < 0 alors
& nbsp & nbsp // aucun Numero de Port n'donc exit gracieusement
& ! & ! & ! & nbsp Sortie
& nbsp & nbsp Tampon := Copy(Tmp, DotIdx 1, SlashIdx)
& nbsp & nbsp val(Tampon, Resultat, DotIdx)
fin
{Requete d'un Signet dans un document
& nbsp EG. www.hello.com/index.htm#notwelcome
& nbsp QueryBookMark sera de retour 'notwelcome'}
fonction de QueryBookmark(const URL: String): String
var
& nbsp & nbsp HashPos: Integer
& nbsp & nbsp QuestionPos: Integer
begin
& nbsp & nbsp HashPos:= Pos('#', URL)
& nbsp & nbsp si (HashPos <= 0) puis la Sortie
& nbsp & nbsp QuestionPos:= Pos('?', URL)
& nbsp & nbsp si (QuestionPos <= 0) then
& ! & ! & ! & nbsp QuestionPos := Longueur(URL)
& nbsp & nbsp Resultat := Copy(URL, HashPos 1, QuestionPos-1)
fin
procedure ParseURI(const URI: String var Hote, Document, Signet, Port: String QueryParams: TStrings)
var
& nbsp & nbsp QueryPos, DocPos: Integer
begin
& nbsp & nbsp ProcessQuery(URI, QueryParams, QueryPos)
& nbsp & nbsp Signet := QueryBookmark(URI)
& nbsp & nbsp Port := IntTOStr(QueryPort(URI))
& nbsp & nbsp Document := QueryDocument(URI, DocPos)
& nbsp & nbsp Hote := Copie(URI, 1, DocPos -1)
fin
< & & & & & & & & & & -le CODE de FIN & & & & & & & & & & & & & & ->
Par le moyen de cet algorithme peut etre etendu, elargi, etc., et je suis en train de travailler sur elle. Des suggestions, des commentaires, des critiques, deposer un commentaire.
les BUGS CONNUS:
& nbsp & nbsp * Selon certaines sources, le Pos n'est pas aussi rapide comme il se doit et ne peut pas etre utilise pour inverser la chaîne de positionnement
& nbsp & nbsp * Oui je sais ce n'est pas le meilleur algorithme pour l'URI de l'analyse, de cette ecriture, je travaille sur des ameliorations de code agrandissements etc.


L'analyse d'uri

L'analyse d'uri : Plusieurs milliers de conseils pour vous faciliter la vie.
Recommander aux amis
  • gplus
  • pinterest

Messages récents

Commentaire

Laisser un commentaire

évaluation