The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.

NAME

Quiq::Url - Operationen im Zusammenhang mit URLs

BASE CLASS

Quiq::Object

DESCRIPTION

Die Klasse definiert Operationen, die im Zusammenhang mit URLs nützlich sind.

METHODS

Konstruktor

new() - Instantiiere Objekt

Synopsis

  $u = $class->new;

Description

Instantiiere ein Objekt der Klasse und liefere eine Referenz auf dieses Objekt zurück. Da die Klasse ausschließlich Klassenmethoden enthält, hat das Objekt ausschließlich die Funktion, eine abkürzende Aufrufschreibweise zu ermöglichen.

Klassenmethoden

href() - Erzeuge URL

Synopsis

  $url = $this->href($baseUrl,@keyVal);

Arguments

$baseUrl

(String) URL bis zum Query-String (ohne Fragezeichen)

@keyVal

Liste der Query-String Parameter

Returns

String

Description

Erzeuge einen URL der Form $baseUrl?<querystring> und liefere diesen zurück.

encode() - Kodiere Zeichenkette

Synopsis

  $encStr = $this->encode($str);
  $encStr = $this->encode($str,$encoding);

Arguments

$str

Die Zeichenkette, die kodiert wird.

$encoding (Default: 'utf-8')

Das Encoding, in dem die Zeichenkette encodiert werden soll.

Returns

String

Description

Kodiere die Zeichenkette $str nach MIME-Type "application/x-www-form-urlencoded" und liefere die resultierende Zeichenkette zurück.

In der Zeichenkette werden alle Zeichen außer

  * - . _ 0-9 A-Z a-z

durch eine Folge von

  %xx

ersetzt, wobei die xx dem Hexadezimalwert des betreffenden Bytes im Encoding des Zeichens entspricht.

decode() - Dekodiere Zeichenkette

Synopsis

  $str = $this->decode($encStr);
  $str = $this->decode($encStr,$encoding);

Arguments

$str

Die Zeichenkette, die dekodiert wird.

$encoding (Default: 'utf-8')

Das Encoding, in dem die Zeichenkette encodiert ist.

Returns

String

Description

Dekodiere die "application/x-www-form-urlencoded" codierte Zeichenkette $encStr und liefere die resultierende Zeichenkette zurück.

queryEncode() - Kodiere Querystring

Synopsis

  $queryStr = $this->queryEncode(@opt,@keyVal);
  $queryStr = $this->queryEncode($initialChar,@opt,@keyVal);

Alias

qE()

Arguments

@keyVal

Liste der Schlüssel/Wert-Paare, die URL-kodiert werden sollen.

$initialChar

Zeichen, das der URL-Kodierten Zeichenkette vorangestellt werden soll. Dies ist, wenn bentigt, typischweise ein Fragezeichen (?).

Options

-encoding => $encoding (Default: 'utf-8')

Das Encoding, in dem die Zeichenkette encodiert werden soll.

-null => $bool (Default: 0)

Kodiere auch Schlüssel/Wert-Paare mit leerem Wert (undef oder ''). Per Default werden diese weggelassen.

-separator => $char (Default: '&')

Verwende $char als Trennzeichen zwischen den Schlüssel/Wert-Paaren. Mögliche Werte sind '&' und ';'.

Returns

String

Description

Kodiere die Schlüssel/Wert-Paare in @keyVal gemäß MIME-Type "application/x-www-form-urlencoded" und füge sie zu einem Query String zusammen.

Examples

Querystring mit Kaufmanns-Und als Trennzeichen:

  $url = Quiq::Url->queryEncode(a=>1,b=>2,c=>3);
  =>
  a=1&b=2&c=3

Querystring mit Semikolon als Trennzeichen:

  $url = Quiq::Url->queryEncode(-separator=>';',d=>4,e=>5);
  =>
  d=4;e=5

Querystring mit einleitendem Fragezeichen:

  $url = Quiq::Url->queryEncode('?',a=>1,b=>2,c=>3);
  =>
  ?a=1&b=2&c=3

Details

Als Trennzeichen zwischen den Paaren wird per Default ein Kaufmanns-Und (&) verwendet:

  key1=val1&key2=val2&...&keyN=valN

Ist der erste Parameter ein Fragezeichen (?), wird dieses dem Query String vorangestellt:

  ?key1=val1&key2=val2&...&keyN=valN

Das Fragezeichen ist für die URL-Generierung nützlich, das Semikolon und das Kaufmanns-Und für die Konkatenation von Querystrings.

Ist der Wert eines Schlüssels eine Arrayreferenz, wird für jedes Arrayelement ein eigenes Schlüssel/Wert-Paar erzeugt:

  a => [1,2,3]

wird zu

  a=1&a=2&a=3

queryDecode() - Dekodiere Querystring

Synopsis

  @arr | $arr = $this->queryDecode($queryStr);
  @arr | $arr = $this->queryDecode($queryStr,$encoding);

Arguments

$queryStr

Querystring, der dekodiert werden soll.

$encoding (Default: 'utf-8')

Das Encoding, in dem der Querystring encodiert ist.

Returns

Liste der dekodierten Schüssel/Wert-Paare. Im Skalarkontext eine Referenz auf die Liste.

Description

Dekodiere den Querystring $queryStr und liefere die resultierende Liste von Schlüssel/Wert-Paaren zurück. Im Skalarkontext liefere eine Referenz auf die Liste.

Die Schlüssel/Wert-Paare können per & oder ; getrennt sein.

split() - Zerlege URL in seine Bestandteile

Synopsis

  ($schema,$user,$passw,$host,$port,$path,$query,$fragment,@opt) =
      $this->split($url);

Options

-defaultSchema => $schema (Default: undef)

Füge Defaultschema hinzu, falls keins angegeben ist. Beispiel: -defaultSchema=>'http://'

-debug => $bool (Default: 0)

Gib die Zerlegung auf STDOUT aus.

Description

Zerlege den URL $url in seine Komponenten und liefere diese zurück. Für eine Komponente, die nicht im URL enthalten ist, wird ein Leerstring ('') geliefert.

Ein vollständiger URL hat die Form:

  schema://[user[:password]@]host[:port]/[path][?query][#fragment]
  ------    ----  --------   ----  ----   ----   -----   --------
  1         2     3          4     5      6      7       8
  
  1 = Schema (http, ftp, ...)
  2 = Benutzername
  3 = Passwort
  4 = Hostname (kann auch IP-Adresse sein)
  5 = Port
  6 = Pfad (Gesamtpfad, evtl. einschließlich Pathinfo)
  7 = Querystring
  8 = Searchstring (wird nicht an den Server übermittelt)

Die Funktion akzeptiert auch unvollständige HTTP URLs:

  http://host.domain
  
  http://host.domain:port/
  
  http://host.domain:port/this/is/a/path
  
  /this/is/a/path?arg1=val1&arg2=val2&arg3=val3#text
  
  is/a/path?arg1=val1&arg2=val2&arg3=val3
  
  path?arg1=val1&arg2=val2&arg3=val3
  
  ?arg1=val1&arg2=val2&arg3=val3

Der Querystring ist alles nach '?' und ggf. bis '#', falls angegeben. Der konkrete Aufbau des Querystring, wie Trennzeichen usw., spielt keine Rolle.

VERSION

1.208

AUTHOR

Frank Seitz, http://fseitz.de/

COPYRIGHT

Copyright (C) 2023 Frank Seitz

LICENSE

This code is free software; you can redistribute it and/or modify it under the same terms as Perl itself.