Lib или функция Delphi/FreePascal, которая эмулирует функцию PHP parse_url


2

Я делаю продюсера сайта в Object Pascal и нуждаюсь в хорошей функции или lib для эмуляции функции parse_url на PHP.

Кто-нибудь знает о хороших?

  0

Вы когда-нибудь закончили продюсер сайта? 17 июл. 152015-07-17 02:28:06

2

Freepascal имеет устройство URIParser с функцией ParseURI. Пример того, как его использовать, можно найти в одном из примеров в Freepascal's source. Или old example, что несколько легче понять.


0

The URI RFC списков это регулярное выражение для URI разбора:

^(([^:/?#]+):)?(//([^/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))? 
    12   3 4   5  6 7  8 9 

Где цифры этих группы:

$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 

Для этого URI:

http://www.ics.uci.edu/pub/ietf/uri/#Related 

регулярное выражение довольно простой и не использует особых функций, регулярное выражение lib имеет t o обеспечить, так что захватите один, который совместим с вашей реализацией pascal, и там вы идете.

  0

принимает ли это частичные URL-адреса и те, которые включают логин/пароль? 23 сен. 082008-09-23 22:02:55


2

Я не знаком с функцией parse_url на PHP, но вы можете попробовать класс TIdURI, который входит в комплект Indy (который, в свою очередь, входит в состав последних выпусков Delphi). Я думаю, что они портировали его на FreePascal.

TIdURI является TObject потомок, который инкапсулирует универсальный идентификатор ресурса, как описано в документе стандартов Интернет:

RFC 1630 - Universal Resource Identifiers in WWW

TIdURI предоставляет методы и свойства для сборки и разборки URIs используя составные части, составляющие URI, включая: протокол, хост, порт, путь, документ и закладку.

Если это не работает, пожалуйста, дайте конкретный пример того, что вы пытаетесь достичь - , что вы пытаетесь разобрать из URL.

  0

Я принял ответ Лоэзе, потому что обнаружил, что у Урипарсера у FreePascal есть ResolveRelativeUri, что больше того, что я искал. Я действительно посмотрел на TidURI Unit, и мне это очень понравилось. Я не искал достаточно, чтобы найти что-то вроде ResolveRelativeUri() FreePascal. 24 сен. 082008-09-24 13:11:59


1

Если вы используете wininet.dll, вы также можете использовать их API InternetCrackUrl.


2

Будьте осторожны с классом Indy's TIdURI. Предполагалось, что это парсер общего назначения, но в нем есть несколько ошибок и недостатков дизайна, которые не позволяют ему полностью соответствовать синтаксическому анализатору. В настоящее время я в процессе написания нового класса с нуля для Indy 11, чтобы заменить TIdURI. Это будет полностью совместимый парсер URI, и он также поддержит также анализ IRI (RFC 3987).

  0

Это звучит неплохо, есть ли у вас конкретная ссылка для этого или я должен ждать Indy 11? 12 фев. 092009-02-12 13:40:35