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()”相同。

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
查看更多 >