base64_decode_url()

Allgemein

Diese PHP-Funktion wird für die Aufbereitung des JWS-Strings für den QR-Code auf dem Beleg benötigt. Im Vergleich zur Funktion base64_decode() werden zusätzlich einige Zeichen durch andere ersetzt.

function base64_decode_url($s){

 return base64_decode(str_pad(strtr($s, '-_', '+/'), strlen($s) % 4, '=', STR_PAD_RIGHT));

}

Beispiele

$sJWSString = 'eyJhbGciOiJFUzI1NiJ9.xxx.J7YC28zquHfHzMpx02TqElbXOTSgXQu5JAA9Xu1Xzzu5p8eUYT-sgmyhzRps5nYyEp5Yh8ATIa9130zmuiACHw';

$aJWSParts  = explode('.', $sJWSString);

$sPayload  .= '_'.base64_encode(base64_decode_url($aJWSParts[2]));

Damit wird

J7YC28zquHfHzMpx02TqElbXOTSgXQu5JAA9Xu1Xzzu5p8eUYT-sgmyhzRps5nYyEp5Yh8ATIa9130zmuiACHw

zu

J7YC28zquHfHzMpx02TqElbXOTSgXQu5JAA9Xu1Xzzu5p8eUYT+sgmyhzRps5nYyEp5Yh8ATIa9130zmuiACHw==

3 Gedanken zu „base64_decode_url()“

  1. müsste anstatt
    strlen($s) % 4
    nicht
    strlen($s) + (strlen($s) % 4)

    denn durch strlen($s) % 4 ergibt sich ja nur, wie viele Stellen rechts mit „=“ aufgefüllt werden sollen.

    Hier mein Vorschlag für die Änderung mit str_repat und auf mehrere Zeilen für bessere Lesbarkeit aufgeteilt:

    function base64_decode_url ($s) {
    $s = strtr($s, ‚-_‘, ‚+/‘);

    // wird mit „=“ auf so viele Stellen erweitert, bis die Anzahl der Stellen durch 4 teilbar sind
    $paddingLength = strlen($s) % 4;
    $s .= str_repeat(‚=‘, $paddingLength);

    return base64_decode($s);
    }

    1. Ich hab sogar gerade gelesen, dass base64_decode zumindest seit PHP 7 auch ohne Padding von „=“ korrekt funktioniert und ich konnte dies in meinen Tests und in allen Online-Dekodern, die ich gefunden habe auch bestätigen.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert