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
檢視更多 >