mbstring_binary_safe_encoding

函数
mbstring_binary_safe_encoding ( $reset = false )
参数
  • (bool) $reset Optional. Whether to reset the encoding back to a previously-set encoding. Default false.
    Required:
    Default: false
相关
  • reset_mbstring_encoding()
定义位置
相关方法
reset_mbstring_encodingwp_admin_bar_my_sites_menuwp_admin_bar_site_menu
引入
3.7.0
弃用
-

mbstring_binary_safe_encoding 函数用于在 PHP 的多字节字符串函数中临时设置字符编码为”二进制”: 这是必要的,因为当编码被设置为 UTF-8 时,一些 PHP 的安装对多字节字符串有问题。

当启用 func_overload 时,将 mbstring 内部编码设置为二进制安全编码。

当mbstring.func_overload用于多字节编码时,strlen()和类似函数的结果会尊重utf8字符,导致二进制数据返回错误的长度。

这个函数将mbstring编码重写为二进制安全编码,并在之后通过`reset_mbstring_encoding`函数将其重置为用户期望的编码。

递归调用这个函数是安全的,但是每个`mbstring_binary_safe_encoding()`的调用都必须以相同数量的 调用的次数必须与”reset_mbstring_encoding()”相同。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
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 );
}
}
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 ); } }
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 );
	}
}

常见问题

FAQs
查看更多 >