Библиотека или функция Delphi / FreePascal, которая эмулирует PHP-функцию parse_url - PullRequest
2 голосов
/ 24 сентября 2008

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

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

Ответы [ 5 ]

2 голосов
/ 02 февраля 2009

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

2 голосов
/ 24 сентября 2008

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

2 голосов
/ 24 сентября 2008

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

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

RFC 1630 - Универсальные идентификаторы ресурсов в WWW

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

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

1 голос
/ 24 сентября 2008

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

0 голосов
/ 24 сентября 2008

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 регулярным выражением, поэтому возьмите такое, которое совместимо с вашей реализацией паскаля, и все готово.

...