A Delphi / lib ou função FreePascal que emula parse_url a função do PHP
-
02-07-2019 - |
Pergunta
Eu estou fazendo um produtor mapa do site em Object Pascal e precisa de uma função bem ou lib para emular o parse_url função em PHP.
Alguém sabe de qualquer bons?
Solução
Freepascal tem a UriParser unidade com a função ParseURI. Um exemplo de como usá-lo pode ser encontrado em um dos exemplo em o Freepascal fonte . Ou um idade exemplo que é um pouco mais fácil de entender.
Outras dicas
Eu não estou familiarizado com a função parse_url em PHP, mas você pode tentar o classe TIdURI que acompanha casa Indy (que por sua vez está incluída com a maioria dos lançamentos recentes Delphi). Eu acho que eles portou para FreePascal também.
TIdURI é um descendente TObject que encapsula um Universal Resource Identifier, conforme descrito no documento Internet Standards:
TIdURI fornece métodos e propriedades para montagem e desmontagem de URIs usando os componentes que compõem o URI, incluindo:. Protocolo, host, porta Path, Documento, e Bookmark
Se isso não funcionar, por favor, dê um exemplo específico do que você está tentando realizar -. o que você está tentando analisar a partir de uma URL
Tenha cuidado com classe TIdURI da Indy. Era suposto ser um analisador de uso geral, mas tem alguns bugs e falhas de projeto em que o impedem de ser um analisador totalmente compatível. Eu estou atualmente no processo de escrever uma nova classe a partir do zero para Indy 11 para substituir TIdURI. Será um analisador URI totalmente compatível, e que também irá suppor IRI (RFC 3987) analisar bem.
Se você estiver usando wininet.dll você também pode usar o InternetCrackURL API.
O URI RFC listas Esta expressão regular para URI parsing:
^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?
12 3 4 5 6 7 8 9
Quando os números são esses grupos:
$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
Para este URI:
http://www.ics.uci.edu/pub/ietf/uri/#Related
A expressão regular é bastante simples e não usa especial apresenta a expressão regular lib tem para oferecer, então pegue um que seja compatível com a sua implementação pascal e lá vai você.