Signatur
Beschreibung
oauth_urlencode() kodiert einen URI-String gemäß RFC 3986 (Percent-Encoding). Im Gegensatz zu PHPs eingebautem urlencode() kodiert diese Funktion auch Zeichen wie ~ nicht und behandelt Leerzeichen als %20 statt als +. Dies entspricht exakt den Anforderungen der OAuth 1.0-Spezifikation (RFC 5849).
Die Funktion wird typischerweise beim manuellen Aufbau von OAuth-Signaturen verwendet, z. B. beim Erstellen der Signature Base String oder beim Kodieren von Query-Parametern und Basis-URLs. Wer die PECL-OAuth-Erweiterung nutzt, trifft diese Funktion als prozedurale Hilfsfunktion an.
Ein wichtiger Unterschied zu rawurlencode(): RFC 3986 schließt das Tilde-Zeichen (~) explizit als unreserved character ein und lässt es daher unkodiert, während ältere PHP-Versionen von rawurlencode() es kodieren. Ab PHP 5.3 verhält sich rawurlencode() identisch — dennoch ist oauth_urlencode() in OAuth-Kontexten die semantisch klarere Wahl.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $uri Pflicht | string | Der zu kodierende URI-String. Typischerweise eine vollständige URL oder ein einzelner OAuth-Parameter-Wert. |
Rückgabewert
!, ', (, ), * und Leerzeichen werden als Prozent-Sequenzen dargestellt; ~, Buchstaben, Ziffern, -, . und _ bleiben unverändert.Beispiele
Einfache URL kodieren
<?php
// Voraussetzung: PECL OAuth-Erweiterung ist installiert
$url = 'https://api.example.com/oauth/request token?foo=bar baz&tilde=~test';
$encoded = oauth_urlencode($url);
echo $encoded;
Aufbau eines OAuth Signature Base String
<?php
// Voraussetzung: PECL OAuth-Erweiterung ist installiert
$method = 'POST';
$baseUrl = 'https://api.example.com/v1/endpoint';
$params = [
'oauth_consumer_key' => 'myKey',
'oauth_nonce' => 'randomNonce123',
'oauth_timestamp' => '1700000000',
'oauth_version' => '1.0',
];
ksort($params);
$paramString = http_build_query($params, '', '&', PHP_QUERY_RFC3986);
// Alle drei Teile des Base String werden RFC-3986-kodiert zusammengesetzt
$baseString = implode('&', [
oauth_urlencode($method),
oauth_urlencode($baseUrl),
oauth_urlencode($paramString),
]);
echo $baseString;
// Wichtig · Fallstricke
Erweiterung erforderlich: oauth_urlencode() ist Teil der PECL-Erweiterung oauth und steht nicht in einer Standard-PHP-Installation zur Verfügung. Installation über pecl install oauth oder als Distribution-Paket (z. B. php-oauth).
Abgrenzung zu rawurlencode(): Ab PHP 5.3 ist das Verhalten von rawurlencode() bezüglich ~ RFC-3986-konform, sodass beide Funktionen in modernen PHP-Versionen identische Ergebnisse liefern. In älteren Umgebungen oder für maximale Klarheit in OAuth-Kontexten sollte jedoch oauth_urlencode() bevorzugt werden.
OAuth 2.0: OAuth 2.0 verzichtet auf die komplexe Signaturmechanik von OAuth 1.0; dort wird oauth_urlencode() in der Regel nicht benötigt.