Start · Sprachen · PHP · Referenz · oauth_urlencode

oauth_urlencode

Funktion

Kodiert einen URI-String nach RFC 3986, wie es für OAuth-Signaturen erforderlich ist.

seit PHP 1.0.0 Kategorie: http

Signatur

oauth_urlencode(string $uri): string

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

Typ
string
Beschreibung
Den nach RFC 3986 percent-kodierten String. Sonderzeichen wie !, ', (, ), * 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;
https%3A%2F%2Fapi.example.com%2Foauth%2Frequest%20token%3Ffoo%3Dbar%20baz%26tilde%3D~test

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;
POST&https%3A%2F%2Fapi.example.com%2Fv1%2Fendpoint&oauth_consumer_key%3DmyKey%26oauth_nonce%3DrandomNonce123%26oauth_timestamp%3D1700000000%26oauth_version%3D1.0

// 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.