library/Garp/Util/String.php
static public function mbstringBinarySafeEncoding($reset = false) {
        static $encodings = array();
        static $overloaded = null;

        if (is_null($overloaded)) {
            $overloaded = function_exists('mb_internal_encoding')
                && (ini_get('mbstring.func_overload') & 2);
        }

        if (false === $overloaded) {
            return;
        }

        if (!$reset) {
            $encoding = mb_internal_encoding();
            array_push($encodings, $encoding);
            mb_internal_encoding('ISO-8859-1');
        }

        if ($reset && $encodings) {
            $encoding = array_pop($encodings);
            mb_internal_encoding($encoding);
        }
    }
static public function mbstringBinarySafeEncoding($reset = false) {
        static $encodings = array();
        static $overloaded = null;

        if (is_null($overloaded)) {
            $overloaded = function_exists('mb_internal_encoding')
                && (ini_get('mbstring.func_overload') & 2);
        }

        if (false === $overloaded) {
            return;
        }

        if (!$reset) {
            $encoding = mb_internal_encoding();
            array_push($encodings, $encoding);
            mb_internal_encoding('ISO-8859-1');
        }

        if ($reset && $encodings) {
            $encoding = array_pop($encodings);
            mb_internal_encoding($encoding);
        }
    }
static public function mbstringBinarySafeEncoding ( $ reset = false ) { static $ encodings = array ( ) ; static $ overloaded = null ; if ( is_null ( $ overloaded ) ) { $ overloaded = function_exists ( 'mb_internal_encoding' ) && ( ini_get ( 'mbstring.func_overload' ) & 2 ) ; } if ( false === $ overloaded ) { return ; } if ( ! $ reset ) { $ encoding = mb_internal_encoding ( ) ; array_push ( $ encodings , $ encoding ) ; mb_internal_encoding ( 'ISO-8859-1' ) ; } if ( $ reset && $ encodings ) { $ encoding = array_pop ( $ encodings ) ; mb_internal_encoding ( $ encoding ) ; } }
Set the mbstring internal encoding to a binary safe encoding when func_overload
is enabled.

When mbstring.func_overload is in use for multi-byte encodings, the results from
strlen() and similar functions respect the utf8 characters, causing binary data
to return incorrect lengths.

This function overrides the mbstring encoding to a binary-safe encoding, and
resets it to the users expected encoding afterwards through the
`resetMbstringEncoding` function.

It is safe to recursively call this function, however each
`mbstring_binary_safe_encoding()` call must be followed up with an equal number
of `resetMbstringEncoding()` calls.

@param bool $reset Optional. Whether to reset the encoding back to a previously-set encoding.
Default false.
@return void

@since 3.7.0
@see resetMbstringEncoding()
Set the mbstring internal encoding to a binary safe encoding when func_overload is enabled .