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

StackOverflow https://stackoverflow.com/questions/124170

Вопрос

Я создаю sitemap producer на Object Pascal, и мне нужна хорошая функция или библиотека для эмуляции parse_url - синтаксический анализ функция на PHP.

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

Это было полезно?

Решение

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

Другие советы

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

TIdURI - это потомок TObject, который инкапсулирует универсальный идентификатор ресурса, как описано в документе Internet Standards document:

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

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

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

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

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

Тот Самый 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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top