Archiv für den Monat: Dezember 2019

preg_replace e-modifier warning in fpdf fixed

Ältere Versionen der fpdf-Library bekommen eine PHP-Warnung, wegen des e-modifiers in der preg_match Funktion. In der Datei fpdi_pdf_parser.php kommt diser Hinweis in der „function desescapeString($s)“ (etwa Zeile 257).

Natürlich macht es Sinn, die Library auf eine neuere Version zu updaten. Da sich aber in der Zwischenzeit einige Funktionalitäten geändert haben, wird das auch ein Anpassen des Quelltextes zur Folge haben. In der Zwischenzeit hält nachfolgender Fix die Logfiles sauber:

    function deescapeString($s) {
        /*
        $torepl = array("/\\\(\d{1,3})/e" => "chr(octdec(\\1))",
                        "/\\\\\(/" => "(",
                        "/\\\\\)/" => ")");
        return preg_replace(array_keys($torepl),$torepl,$s);
        */
        return preg_replace_callback_array(
            [
                "~\\\(\d{1,3})~" => function($match) {
                    return chr(octdec($match));
                },
                "~\\\\\(~" => function($match) {
                    return '(';
                },
                "~\\\\\)~" => function($match) {
                    return ')';
                }
            ], $s
        );
    }

Der auskommentierte Bereich war das Original (und kann gelöscht werden). Der Ersatz nutzt preg_replace_callback_array (PHP 7).