mbstring_binary_safe_encoding() – Set the mbstring internal encoding to a binary safe encoding when func_overload is enabled.

You appear to be a bot. Output may be restricted

Description

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 reset_mbstring_encoding 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 reset_mbstring_encoding() calls.

Usage

mbstring_binary_safe_encoding( $reset );

Parameters

$reset
( bool ) optional – Optional. Whether to reset the encoding back to a previously-set encoding. Default false.

Returns

void

Source

File name: wordpress/wp-includes/functions.php
Lines:

1 to 29 of 29
function mbstring_binary_safe_encoding( $reset = false ) {
  static $encodings  = array();
  static $overloaded = null;

  if ( is_null( $overloaded ) ) {
    if ( function_exists( 'mb_internal_encoding' )
      && ( (int) ini_get( 'mbstring.func_overload' ) & 2 ) // phpcs:ignore PHPCompatibility.IniDirectives.RemovedIniDirectives.mbstring_func_overloadDeprecated
    ) {
      $overloaded = true;
    } else {
      $overloaded = false;
    }
  }

  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 );
  }
}
 

 View on GitHub View on Trac