UrlParser ist eine PHP-Bibliothek, die einen RFC 3986-kompatiblen URL-Parser und eine PSR-7-kompatible URI-Komponente bereitstellt. Der Zweck dieser Bibliothek besteht darin, einen Parser bereitzustellen, der die RFC-Spezifikation genau implementiert, im Gegensatz zur integrierten Funktion parse_url()
, die sich in einigen subtilen Punkten von der Spezifikation unterscheidet.
Diese Bibliothek hat zwei Hauptzwecke. Der erste, der Informationen aus den analysierten URLs bereitstellt. Um dies zu erreichen, implementiert die Bibliothek die Standard-URI-Verarbeitungsschnittstelle von PSR-7 und stellt außerdem zusätzliche Methoden bereit, die es einfacher machen, häufig verwendete Informationen aus den URLs abzurufen. Der zweite Zweck besteht darin, zusätzlich zu einigen zusätzlichen Methoden, die einige Aufgaben einfacher machen, auch die Änderung dieser URLs über die Schnittstelle des PSR-7-Standards zu ermöglichen.
Während diese Bibliothek hauptsächlich zum Parsen von URLs gedacht ist, basiert das Parsen einfach auf der generischen URI-Syntax. Somit ist es möglich, diese Bibliothek zu verwenden, um beliebige andere URI-Typen anhand der generischen Syntax zu validieren und zu analysieren. Die Bibliothek führt keine schemaspezifische Validierung für die URLs durch.
Zusätzlich zum standardmäßigen RFC 3986-kompatiblen Modus bietet die Bibliothek auch Optionen, die das Parsen von URLs ermöglichen, die UTF-8-Zeichen in verschiedenen Komponenten der URL enthalten, und sie gleichzeitig in die entsprechenden prozentual codierten und IDN-ASCII-Formate konvertieren.
Die API-Dokumentation ist verfügbar unter: http://kit.riimu.net/api/urlparser/
^1.0
)intl
(nur erforderliche IDN-Unterstützung) Der einfachste Weg, diese Bibliothek zu installieren, besteht darin, Composer zum Verwalten Ihrer Abhängigkeiten zu verwenden. Um diese Bibliothek über Composer zu installieren, befolgen Sie einfach diese beiden Schritte:
Erwerben Sie die composer.phar
, indem Sie die Composer-Befehlszeileninstallation in Ihrem Projektstammverzeichnis ausführen.
Sobald Sie das Installationsskript ausgeführt haben, sollte sich die Datei composer.phar
in Ihrem Projektstammverzeichnis befinden und Sie können den folgenden Befehl ausführen:
php composer.phar require "riimu/kit-urlparser:^2.1"
Nachdem Sie diese Bibliothek über Composer installiert haben, können Sie die Bibliothek laden, indem Sie die Datei vendor/autoload.php
einbinden, die von Composer während der Installation generiert wurde.
Wenn Sie bereits mit der Verwendung von Composer vertraut sind, können Sie die Bibliothek alternativ als Abhängigkeit hinzufügen, indem Sie die folgende Datei composer.json
zu Ihrem Projekt hinzufügen und den composer install
Installationsbefehl ausführen:
{
"require" : {
"riimu/kit-urlparser" : " ^2.1 "
}
}
Wenn Sie Composer nicht zum Laden der Bibliothek verwenden möchten, können Sie die Bibliothek auch manuell herunterladen, indem Sie die neueste Version herunterladen und den Ordner src
in Ihr Projekt extrahieren. Anschließend können Sie die bereitgestellte Datei src/autoload.php
einschließen, um die Bibliotheksklassen zu laden.
Bitte beachten Sie, dass bei Verwendung von Composer auch automatisch die anderen erforderlichen PHP-Bibliotheken heruntergeladen werden. Wenn Sie diese Bibliothek manuell installieren, müssen Sie auch die anderen erforderlichen Bibliotheken verfügbar machen.
Die Verwendung dieser Bibliothek ist relativ einfach. Die Bibliothek stellt eine URL-Parsing-Klasse UriParser
und eine unveränderliche Wertobjektklasse Uri
bereit, die die URL darstellt. Um eine URL zu analysieren, können Sie die URL einfach als Zeichenfolge für die parse()
Methode in UriParser
bereitstellen, die eine Instanz von Uri
zurückgibt, die aus der analysierten URL generiert wurde.
Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
$ parser = new Riimu Kit UrlParser UriParser ();
$ uri = $ parser -> parse ( ' http://www.example.com ' );
echo $ uri -> getHost (); // Outputs 'www.example.com'
Alternativ können Sie die Verwendung des UriParser
einfach vollständig überspringen und einfach die URL als Konstruktorparameter für den Uri
bereitstellen:
<?php
require ' vendor/autoload.php ' ;
$ uri = new Riimu Kit UrlParser Uri ( ' http://www.example.com ' );
echo $ uri -> getHost (); // Outputs 'www.example.com'
Der Hauptunterschied zwischen der Verwendung der parse()
Methode und dem Konstruktor besteht darin, dass die parse()
Methode eine null
zurückgibt, wenn die angegebene URL keine gültige URL ist, während der Konstruktor eine InvalidArgumentException
auslöst.
Um verschiedene Arten von Informationen aus der URL abzurufen, stellt die Uri
Klasse verschiedene Methoden zur Verfügung, die Ihnen dabei helfen. Hier ein einfaches Beispiel als Überblick über die verschiedenen verfügbaren Methoden:
<?php
require ' vendor/autoload.php ' ;
$ parser = new Riimu Kit UrlParser UriParser ();
$ uri = $ parser -> parse ( ' http://jane:[email protected]:8080/site/index.php?action=login&prev=index#form ' );
echo $ uri -> getScheme () . PHP_EOL ; // outputs: http
echo $ uri -> getUsername () . PHP_EOL ; // outputs: jane
echo $ uri -> getPassword () . PHP_EOL ; // outputs: pass123
echo $ uri -> getHost () . PHP_EOL ; // outputs: www.example.com
echo $ uri -> getTopLevelDomain () . PHP_EOL ; // outputs: com
echo $ uri -> getPort () . PHP_EOL ; // outputs: 8080
echo $ uri -> getStandardPort () . PHP_EOL ; // outputs: 80
echo $ uri -> getPath () . PHP_EOL ; // outputs: /site/index.php
echo $ uri -> getPathExtension () . PHP_EOL ; // outputs: php
echo $ uri -> getQuery () . PHP_EOL ; // outputs: action=login&prev=index
echo $ uri -> getFragment () . PHP_EOL ; // outputs: form
print_r ( $ uri -> getPathSegments ()); // [0 => 'site', 1 => 'index.php']
print_r ( $ uri -> getQueryParameters ()); // ['action' => 'login', 'prev' => 'index']
Die Uri
-Komponente bietet außerdem verschiedene Methoden zum Ändern der URL, sodass Sie neue URLs aus separaten Komponenten erstellen oder vorhandene ändern können. Beachten Sie, dass die Uri
Komponente ein unveränderliches Wertobjekt ist, was bedeutet, dass jede der modifizierenden Methoden eine neue Uri
Instanz zurückgibt, anstatt die vorhandene zu ändern. Hier ist ein einfaches Beispiel für die Erstellung einer URL aus ihren Komponenten:
<?php
require ' vendor/autoload.php ' ;
$ uri = ( new Riimu Kit UrlParser Uri ())
-> withScheme ( ' http ' )
-> withUserInfo ( ' jane ' , ' pass123 ' )
-> withHost ( ' www.example.com ' )
-> withPort ( 8080 )
-> withPath ( ' /site/index.php ' )
-> withQueryParameters ([ ' action ' => ' login ' , ' prev ' => ' index ' ])
-> withFragment ( ' form ' );
// Outputs: http://jane:[email protected]:8080/site/index.php?action=login&prev=index#form
echo $ uri ;
Wie aus dem vorherigen Beispiel hervorgeht, stellt die Uri
-Komponente auch eine __toString()
Methode bereit, die die URL als String bereitstellt.
Hier ist die Liste der Methoden, die die Uri
Komponente zum Abrufen von Informationen von der URL bereitstellt:
getScheme()
gibt das Schema der URL oder eine leere Zeichenfolge zurück, wenn die URL kein Schema hat.
getAuthority()
gibt die Komponente aus der URL zurück, die aus Benutzername, Passwort, Hostname und Port im Format user-info@hostname:port
besteht
getUserInfo()
gibt die Komponente von der URL zurück, die den Benutzernamen und das Passwort durch einen Doppelpunkt getrennt enthält.
getUsername()
gibt den entschlüsselten Benutzernamen aus der URL oder eine leere Zeichenfolge zurück, wenn in der URL kein Benutzername vorhanden ist.
getPassword()
gibt das entschlüsselte Passwort aus der URL oder eine leere Zeichenfolge zurück, wenn in der URL kein Passwort vorhanden ist.
getHost()
gibt den Hostnamen der URL oder eine leere Zeichenfolge zurück, wenn die URL keinen Host hat.
getIpAddress()
gibt die IP-Adresse vom Host zurück, wenn der Host eine IP-Adresse ist. Andernfalls gibt diese Methode null
zurück. Wenn eine IPv6-Adresse angegeben wurde, wird die Adresse ohne die umgebenden Klammern zurückgegeben.
getTopLevelDomain()
gibt die Top-Level-Domain vom Host zurück. Wenn kein Host vorhanden ist oder der Host eine IP-Adresse ist, wird stattdessen eine leere Zeichenfolge zurückgegeben.
getPort()
gibt den Port aus der URL oder einen null
zurück, wenn in der URL kein Port vorhanden ist. Diese Methode gibt auch eine null
zurück, wenn der Port der Standardport für das aktuelle Schema ist (z. B. 80 für http).
getStandardPort()
gibt den Standardport für das aktuelle Schema zurück. Wenn kein Schema vorhanden ist oder der Standardport für das Schema nicht bekannt ist, wird stattdessen eine null
zurückgegeben.
getPath()
gibt den Pfad der URL oder eine leere Zeichenfolge zurück, wenn die URL keinen Pfad hat.
getPathSegments()
gibt ein Array dekodierter Pfadsegmente zurück (dh den durch jeden Schrägstrich geteilten Pfad). Leere Pfadsegmente werden verworfen und nicht im zurückgegebenen Array enthalten.
getPathExtension()
gibt die Dateierweiterung aus dem Pfad oder eine leere Zeichenfolge zurück, wenn die URL keinen Pfad hat.
getQuery()
gibt die Abfragezeichenfolge der URL oder eine leere Zeichenfolge zurück, wenn die URL keine Abfragezeichenfolge enthält.
getQueryParameters()
analysiert die Abfragezeichenfolge der URL mithilfe der Funktion parse_str()
und gibt das Array der analysierten Werte zurück.
getFragment()
gibt das Fragment der URL oder eine leere Zeichenfolge zurück, wenn die URL kein Fragment enthält.
__toString()
gibt die URL als String zurück.
Die Uri
-Komponente stellt verschiedene Methoden bereit, mit denen URLs geändert und neue erstellt werden können. Beachten Sie, dass jede Methode eine neue Instanz von Uri
zurückgibt, anstatt die vorhandene zu ändern, da es sich bei der Uri
-Klasse um ein unveränderliches Wertobjekt handelt.
withScheme($scheme)
gibt eine neue Instanz mit dem angegebenen Schema zurück. Ein leeres Schema kann verwendet werden, um das Schema aus der URL zu entfernen. Beachten Sie, dass jedes bereitgestellte Schema auf Kleinbuchstaben normalisiert ist.
withUserInfo($user, $password = null)
gibt eine neue Instanz mit dem angegebenen Benutzernamen und Passwort zurück. Beachten Sie, dass das Passwort ignoriert wird, sofern kein Benutzername angegeben wird. Mit einem leeren Benutzernamen können Sie den Benutzernamen und das Passwort aus der URL entfernen. Jedes Zeichen, das nicht allein in die URL eingefügt werden kann, wird prozentual codiert.
withHost($host)
gibt eine neue Instanz mit dem angegebenen Host zurück. Ein leerer Host kann verwendet werden, um den Host aus der URL zu entfernen. Beachten Sie, dass diese Methode keine internationalen Domänennamen akzeptiert. Beachten Sie, dass diese Methode auch den Host in Kleinbuchstaben normalisiert.
withPort($port)
gibt eine neue Instanz mit dem angegebenen Port zurück. Mit einer null
kann der Port aus der URL entfernt werden.
withPath($path)
gibt eine neue Instanz mit dem angegebenen Pfad zurück. Um den Pfad aus der URL zu entfernen, kann ein leerer Pfad verwendet werden. Beachten Sie, dass jedes Zeichen, das kein gültiges Pfadzeichen ist, in der URL prozentual codiert wird. Vorhandene prozentkodierte Zeichen werden jedoch nicht doppelt kodiert.
withPathSegments(array $segments)
gibt eine neue Instanz mit dem Pfad zurück, der aus dem Array von Pfadsegmenten erstellt wurde. Alle ungültigen Pfadzeichen in den Segmenten werden prozentual kodiert, einschließlich des Schrägstrichs und vorhandener prozentkodierter Zeichen.
withQuery($query)
gibt eine neue Instanz mit der angegebenen Abfragezeichenfolge zurück. Um den Pfad aus der URL zu entfernen, kann eine leere Abfragezeichenfolge verwendet werden. Beachten Sie, dass alle Zeichen, die keine gültigen Abfragezeichenfolgen sind, in der URL prozentual codiert werden. Vorhandene prozentkodierte Zeichen werden jedoch nicht doppelt kodiert.
withQueryParameters(array $parameters)
gibt eine neue Instanz mit der Abfragezeichenfolge zurück, die aus den bereitgestellten Parametern mithilfe der Funktion http_build_query()
erstellt wurde. Alle ungültigen Abfragezeichenfolgezeichen in den Parametern werden prozentcodiert, einschließlich des kaufmännischen Und-Zeichens, des Gleichheitszeichens und vorhandener prozentcodierter Zeichen.
withFragment($fragment)
gibt eine neue Instanz mit dem angegebenen Fragment zurück. Um das Fragment aus der URL zu entfernen, kann eine leere Zeichenfolge verwendet werden. Beachten Sie, dass jedes Zeichen, das kein gültiges Fragmentzeichen ist, in der URL prozentual codiert wird. Vorhandene prozentkodierte Zeichen werden jedoch nicht doppelt kodiert.
Standardmäßig stellt diese Bibliothek einen Parser bereit, der RFC 3986-kompatibel ist. Die RFC-Spezifikation erlaubt nicht die Verwendung von UTF-8-Zeichen im Domänennamen oder anderen Teilen der URL. Die korrekte Darstellung dieser in der URL besteht in der Verwendung eines IDN-Standards für Domänennamen und der prozentualen Codierung der UTF-8-Zeichen in anderen Teilen.
Um Ihnen jedoch den Umgang mit UTF-8-kodierten Zeichen zu erleichtern, kodieren viele der Methoden in der Uri
Komponente automatisch alle Zeichen, die nicht eigenständig in die URL eingefügt werden können, einschließlich UTF-8-Zeichen, prozentual. Aufgrund der damit verbundenen Komplexität lässt die Methode withHost()
jedoch keine UTF-8-codierten Zeichen zu.
Standardmäßig analysiert der Parser auch keine URLs, die UTF-8-codierte Zeichen enthalten, da dies gegen die RFC-Spezifikation verstoßen würde. Der Parser bietet jedoch zwei zusätzliche Parsing-Modi, die diese Zeichen wann immer möglich zulassen.
Wenn Sie URLs analysieren möchten, deren Benutzerinformationen (z. B. Benutzername oder Passwort), Pfad-, Abfrage- oder Fragmentkomponenten der URL möglicherweise UTF-8-Zeichen enthalten, können Sie einfach den UTF-8-Analysemodus verwenden. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
$ parser = new Riimu Kit UrlParser UriParser ();
$ parser -> setMode ( Riimu Kit UrlParser UriParser:: MODE_UTF8 );
$ uri = $ parser -> parse ( ' http://www.example.com/föö/bär.html ' );
echo $ uri -> getPath (); // Outputs: /f%C3%B6%C3%B6/b%C3%A4r.html
UTF-8-Zeichen im Domainnamen sind jedoch ein etwas komplexeres Problem. Der Parser bietet jedoch eine rudimentäre Unterstützung für das Parsen dieser Domänennamen im IDNA-Modus. Zum Beispiel:
<?php
require ' vendor/autoload.php ' ;
$ parser = new Riimu Kit UrlParser UriParser ();
$ parser -> setMode ( Riimu Kit UrlParser UriParser:: MODE_IDNA );
$ uri = $ parser -> parse ( ' http://www.fööbär.com ' );
echo $ uri -> getHost (); // Outputs: www.xn--fbr-rla2ga.com
Beachten Sie, dass die Verwendung dieses Parsing-Modus die Aktivierung der PHP-Erweiterung intl
erfordert. Der entsprechende Parsing-Modus kann dem Konstruktor der Uri
Komponente auch mithilfe des zweiten Konstruktorparameters bereitgestellt werden.
Obwohl Unterstützung für das Parsen dieser UTF-8-Zeichen verfügbar ist, stellt diese Bibliothek keine Methoden für die umgekehrten Operationen bereit, da der Zweck dieser Bibliothek darin besteht, mit RFC 3986-kompatiblen URIs umzugehen.
Aufgrund der Tatsache, dass die RFC 3986-Spezifikation einige URLs trotz geringfügiger Unterschiede als gleichwertig definiert, führt diese Bibliothek eine minimale Normalisierung der bereitgestellten Werte durch. Sie können auf diese Fälle stoßen, wenn Sie beispielsweise von Benutzern bereitgestellte URLs analysieren. Die bemerkenswertesten Normalisierungen, denen Sie begegnen können, sind folgende:
scheme
und host
wird die Groß-/Kleinschreibung nicht beachtet. Daher werden diese Komponenten immer auf Kleinbuchstaben normalisiert.getAuthority()
und __toString()
zurückgegebenen Zeichenfolgen enthalten, wenn der Port der Standardport für das aktuelle Schema ist.__toString()
zurückgegebenen Zeichenfolge kann sich ändern, je nachdem, ob die URL über eine authority
verfügt oder nicht.userinfo
Komponente kann unterschiedlich sein, da der UriParser
mit der PSR-7-Spezifikation arbeitet, die keine Möglichkeit bietet, codierten Benutzernamen oder Passwort bereitzustellen. Diese Bibliothek unterliegt dem Copyright (c) 2013-2022 von Riikka Kalliomäki.
Lizenz- und Kopierinformationen finden Sie unter LIZENZ.