首頁 後端開發 php教程 PHP中mb_detect_encoding函數的使用方法

PHP中mb_detect_encoding函數的使用方法

Jun 13, 2018 pm 03:03 PM
php

這篇文章主要介紹了詳解PHP中的mb_detect_encoding函數使用方法,包括對字串編碼的轉換和判斷以及Call to undefined function mb_detect_encoding()錯誤的解決,需要的朋友可以參考下

#php中可以使用mb_detect_encoding() 函式來判斷字串是什麼編碼的。

當在php中使用mb_detect_encoding函數進行編碼識別時,很多人都碰到過識別編碼有誤的問題,例如對與GB2312和UTF-8,或者UTF-8和GBK(這裡主要是對於cp936的判斷),網路上說是由於字元短時mb_detect_encoding會出現誤判。

程式碼如下:

$encode = mb_detect_encoding($keytitle, array("ASCII","UTF-8","GB2312","GBK","BIG5"));
if($encode == "UTF-8"){
  $keytitle = iconv("UTF-8","GBK",$keytitle);
}
登入後複製

#這段程式碼的作用是偵測字串的編碼是否UTF-8,是的話就轉換為GBK。
可是當 $keytitle = “оƬ”;時。偵測結果卻是UTF-8.這個bug其實不算是bug,寫程式時也不應當過度依賴mb_detect_encoding,當字串較短時,偵測結果產生偏差的可能性就很高。
解決辦法,程式碼如下:

$encode = mb_detect_encoding($keytitle, array("ASCII","GB2312","GBK","UTF-8");
登入後複製

三個參數分別是:被偵測的輸入變數、編碼方式的偵測順序(一旦為真,後面自動忽略)、strict模式對編碼偵測的順序進行調整,將最大可能性放在前面,這樣減少被錯誤轉換的機會。
一般要先排gb2312,當有GBK和UTF-8時,需要將常用的排列到前面。

PHP字串編碼的轉換和判斷

GBK 和UTF-8 編碼的轉換是一個非常噁心的事情,例如像PHP 中的json_encode 本身根本不支援GBK 形式的編碼。有兩個函式庫函數可以支援編碼的轉換,通常能想到的就是iconv 函數,使用起來也非常爽:
iconv('GBK', 'UTF-8//IGNORE', '測試字串'); // 將字串由GBK 編碼轉換為UTF-8 編碼

但iconv 只能解決編碼預先知道的情況,如果字串編碼未知,則需要先探測其編碼,這時可能會用到mb_string 擴充庫:
mb_detect_encoding('測試字串');

可是mb_detect_encoding 存在一個硬傷,常出現判斷不準確的情況。或許這樣就可以解決:

// 使用 iconv 转换并判断是否等值,效率不高
function is_utf8 ($str) {
  if ($str === iconv('UTF-8', 'UTF-8//IGNORE', $str)) {
    return 'UTF-8';
  }
}
// 多种编码的情况
function detect_encoding ($str) {
  foreach (array('GBK', 'UTF-8') as $v) {
    if ($str === iconv($v, $v . '//IGNORE', $str)) {
      return $v;
    }
  }
}
登入後複製

透過以上方式得到字串編碼訊息後,就可以利用 iconv 或 mb_convert_encoding 來轉換編碼了。

Call to undefined function mb_detect_encoding()錯誤解決

Windows系統下:
一、Fatal error: Call to undefined function: iconv() in C:\Program Files\AppServ\www\...\xxx.php on line 82
php中有個iconv()函數用來進行字元編碼轉換
在php.ini檔案中同樣存在extension=php_iconv.dll
這樣的宣告才能保證這個函數正常使用
如果在php.ini檔案中的extension=php_iconv.dll前面有分號
表示被註解掉了,如果存在分號就要去掉,重新啟動伺服器
再次執行程式才能解決

二、Fatal error: Call to undefined function: mb_detect_encoding() in C:\Program Files\AppServ\www\.. .\xxx.php on line 1355
1、找到php擴充目錄(我的php擴充目錄的路徑是:C:\Program Files\AppServ\php\extensions)
     在extensions目錄下方找到php_mbstring.dll文件,
2、將php_mbstring.dll這個文件拷貝到php.ini文件所在的目錄下(我的php.ini文件所在的目錄:C:\WINDOWS)
3、用記事本開啟php. ini文件,使用快捷鍵Ctrl F查找extension=php_mbstring.dll
4、 如果php.ini文件中存在extension=php_mbstring.dll,去掉該行extension前面的分號,
      如果不存在,就在其他extension=...的下一行加入extension=php_mbstring.dll,
      最終記得保存php.ini檔案
5.   重新啟動你的Apache伺服器

剛剛發現其實不拷貝php_mbstring. dll這個檔案到php.ini所在目錄也行

Linux系統下:

出現下面問題時:

PHP   1. {main} () /home/xu/web/whois/ab.cn.php:0
PHP   2. base_func->is_exist() /home/xu/web/whois/ab.cn.php:21
PHP   3. strftime() /home/xu/web/whois/whois.mysql.php:46
ab.cnis exist
PHP Fatal error:  Call to undefined function mb_detect_encoding() in /home/home/homeined function mb_detect_encoding( /web/whois/whois.main.php on line 98
在網上查找了各種資料後才知道原來是php-mbstring這個php插件沒有安裝(有些同學可能是沒有在php.ini中起用此插件),寫下此段文件以作筆記。

    先使用yum或apt安裝mbstring.so,使用指令:yum install php-mbstring或apt-get install php-mbstring (ubuntu使用者最好使用apt-cache search mbstring搜尋一番後再安裝,軟體名字可能有誤)

    然後修改php.ini:執行vim /etc/php.ini,加入extension="/usr/lib/php/modules/mbstring.so"內容,後面的路徑可能不一樣,根據mbstring.so存放的目錄做相應的修改即可。一般是不用更改的。

以上就是本文的全部內容,希望對大家的學習有所幫助,更多相關內容請關注PHP中文網!

相關推薦:

如何解決PHP mkdir()無寫權限的問問題

如何實作phpinfo系統檢視參數函數

關於laravel 5.1下php artisan migrate的使用

##

以上是PHP中mb_detect_encoding函數的使用方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱工具

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

神級程式碼編輯軟體(SublimeText3)

適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 適用於 Ubuntu 和 Debian 的 PHP 8.4 安裝和升級指南 Dec 24, 2024 pm 04:42 PM

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

我後悔之前不知道的 7 個 PHP 函數 我後悔之前不知道的 7 個 PHP 函數 Nov 13, 2024 am 09:42 AM

如果您是經驗豐富的PHP 開發人員,您可能會感覺您已經在那裡並且已經完成了。操作

如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 如何設定 Visual Studio Code (VS Code) 進行 PHP 開發 Dec 20, 2024 am 11:31 AM

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

在PHP API中說明JSON Web令牌(JWT)及其用例。 在PHP API中說明JSON Web令牌(JWT)及其用例。 Apr 05, 2025 am 12:04 AM

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

php程序在字符串中計數元音 php程序在字符串中計數元音 Feb 07, 2025 pm 12:12 PM

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

您如何在PHP中解析和處理HTML/XML? 您如何在PHP中解析和處理HTML/XML? Feb 07, 2025 am 11:57 AM

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

解釋PHP中的晚期靜態綁定(靜態::)。 解釋PHP中的晚期靜態綁定(靜態::)。 Apr 03, 2025 am 12:04 AM

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? 什麼是PHP魔術方法(__ -construct,__destruct,__call,__get,__ set等)並提供用例? Apr 03, 2025 am 12:03 AM

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。

See all articles