首頁 後端開發 php教程 php 字元編碼轉換類,支援ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相轉換

php 字元編碼轉換類,支援ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相轉換

Aug 08, 2016 am 09:30 AM
charset str unicode

php 字元編碼轉換類,支援ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相轉換。

四種常見文字檔案編碼方式

ANSI編碼:

無文件頭(文件編碼開頭漢字佔兩個位元組

回車換行符,單字節, 十六進位表示為0d  0a

UNICODEDE編碼:

UNICODE FF FE

每一個字元都用兩個位元組編碼

回車換行符, 雙字節,十六進位表示為000d  000a

文件頭十六進位表示為FE FF

後面編碼是把字符的高位放在前面,低位放在後面,正好和Unicode編碼顛倒


雙位元組,十六進位表示0d00  0a00


UTF-8 編碼:


一種變長字符編碼,數字、字母、回車、換行都用一個位元組表示,漢字佔3個位元組


回車換行符,單字節,十六進位表示為0d 0a


轉換原理:先把字元編碼轉為UTF-8,然後再從UTF-8轉換為對應的字元編碼。

CharsetConv.class.php

<?php
/** 字符编码转换类, ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换
*   Date:   2015-01-28
*   Author: fdipzone
*   Ver:    1.0
*
*   Func:
*   public  convert       转换
*   private convToUtf8    把编码转为UTF-8编码
*   private convFromUtf8  把UTF-8编码转换为输出编码
*/

class CharsetConv{ // class start

    private $_in_charset = null;   // 源编码
    private $_out_charset = null;  // 输出编码
    private $_allow_charset = array(&#39;utf-8&#39;, &#39;utf-8bom&#39;, &#39;ansi&#39;, &#39;unicode&#39;, &#39;unicodebe&#39;);


    /** 初始化
    * @param String $in_charset  源编码
    * @param String $out_charset 输出编码
    */
    public function __construct($in_charset, $out_charset){

        $in_charset = strtolower($in_charset);
        $out_charset = strtolower($out_charset);

        // 检查源编码
        if(in_array($in_charset, $this->_allow_charset)){
            $this->_in_charset = $in_charset;
        }

        // 检查输出编码
        if(in_array($out_charset, $this->_allow_charset)){
            $this->_out_charset = $out_charset;
        }

    }


    /** 转换
    * @param  String $str 要转换的字符串
    * @return String      转换后的字符串
    */
    public function convert($str){

        $str = $this->convToUtf8($str);   // 先转为utf8
        $str = $this->convFromUtf8($str); // 从utf8转为对应的编码

        return $str;
    }


    /** 把编码转为UTF-8编码
    * @param  String $str 
    * @return String
    */
    private function convToUtf8($str){

        if($this->_in_charset=='utf-8'){ // 编码已经是utf-8,不用转
            return $str;
        }

        switch($this->_in_charset){
            case 'utf-8bom':
                $str = substr($str, 3);
                break;

            case 'ansi':
                $str = iconv('GBK', 'UTF-8//IGNORE', $str);
                break;

            case 'unicode':
                $str = iconv('UTF-16le', 'UTF-8//IGNORE', substr($str, 2));
                break;

            case 'unicodebe':
                $str = iconv('UTF-16be', 'UTF-8//IGNORE', substr($str, 2));
                break;

            default:
                break;
        }

        return $str;

    }


    /** 把UTF-8编码转换为输出编码
    * @param  String $str
    * @return String
    */
    private function convFromUtf8($str){

        if($this->_out_charset=='utf-8'){ // 输出编码已经是utf-8,不用转
            return $str;
        }

        switch($this->_out_charset){
            case 'utf-8bom':
                $str = "\xef\xbb\xbf".$str;
                break;

            case 'ansi':
                $str = iconv('UTF-8', 'GBK//IGNORE', $str);
                break;

            case 'unicode':
                $str = "\xff\xfe".iconv('UTF-8', 'UTF-16le//IGNORE', $str);
                break;

            case 'unicodebe':
                $str = "\xfe\xff".iconv('UTF-8', 'UTF-16be//IGNORE', $str);
                break;

            default:
                break;
        }

        return $str;

    }


} // class end

?>
登入後複製

demo:
unicode big endian 轉碼

以上就介紹了php 字元編碼轉換類,支援ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相轉換,包括了方面的內容,希望對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脫衣器

AI Hentai Generator

AI Hentai Generator

免費產生 AI 無盡。

熱門文章

R.E.P.O.能量晶體解釋及其做什麼(黃色晶體)
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.最佳圖形設置
3 週前 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O.如果您聽不到任何人,如何修復音頻
4 週前 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25:如何解鎖Myrise中的所有內容
1 個月前 By 尊渡假赌尊渡假赌尊渡假赌

熱工具

記事本++7.3.1

記事本++7.3.1

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

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具

SublimeText3 Mac版

SublimeText3 Mac版

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

深入了解PHP:JSON Unicode轉中文的實作方法 深入了解PHP:JSON Unicode轉中文的實作方法 Mar 05, 2024 pm 02:48 PM

深入了解PHP:JSONUnicode轉中文的實作方法在開發中,我們經常會遇到需要處理JSON資料的情況,而JSON中的Unicode編碼在一些場景下會為我們帶來一些問題,特別是當需要將Unicode編碼轉換為中文字元時。在PHP中,有一些方法可以幫助我們實現這個轉換過程,以下將介紹常用的方法,並提供具體的程式碼範例。首先,讓我們先來了解一下JSON中Un

unicode怎麼轉中文 unicode怎麼轉中文 Dec 14, 2023 am 10:57 AM

Unicode是一種字元編碼標準,用於表示各種語言和符號。若要將Unicode編碼轉換為中文字符,可使用Python的內建函數chr()和ord()。

解決Eclipse中文亂碼問題的方法試試看 解決Eclipse中文亂碼問題的方法試試看 Jan 03, 2024 pm 05:28 PM

Eclipse中文亂碼困擾?試試這些解決方案,需要具體程式碼範例一、背景介紹隨著電腦科技的不斷發展,中文在軟體開發中扮演越來越重要的角色。然而,許多開發者在使用Eclipse進行中文開發時會遇到亂碼問題,影響了工作效率。那麼,本文將介紹一些常見的亂碼問題,並給出對應的解決方案及程式碼範例,幫助讀者解決Eclipse中文亂碼問題。二、常見亂碼問題及解決方案文件

PHP教學:如何將JSON Unicode轉換為中文字符 PHP教學:如何將JSON Unicode轉換為中文字符 Mar 05, 2024 pm 06:36 PM

JSON(JavaScriptObjectNotation)是一種輕量級的資料交換格式,通常用於Web應用程式之間的資料交換。在處理JSON資料時,我們經常會遇到Unicode編碼的中文字元(例如"u4e2du6587"),需要將其轉換為可讀的中文字元。在PHP中,我們可以透過一些簡單的方法來實現這個轉換。接下來,我們將詳細介紹如何將JSONUnico

解決Java連接MySQL資料庫時Unicode字元集編碼不一致的問題 解決Java連接MySQL資料庫時Unicode字元集編碼不一致的問題 Jun 10, 2023 am 11:39 AM

隨著大數據、雲端運算等技術的發展,資料庫成為了企業資訊化的重要基石之一。在Java開發的應用程式中,連接MySQL資料庫已成為常態。然而,在這個過程中,我們常常會遭遇一個棘手的問題──Unicode字元集編碼不一致。這不僅會影響我們的開發效率,還會影響應用程式的效能和穩定性。本文將介紹如何解決這個問題,讓Java連接MySQL資料庫更順暢。一、Unicode

unicode和ascii有哪些差別 unicode和ascii有哪些差別 Sep 06, 2023 am 11:56 AM

unicode和ascii的差異包括編碼範圍不同、儲存空間不同和相容性不同等。詳細介紹:1、編碼範圍不同,ascii的編碼範圍是0-127,主要用於表示英語字母,而unicode的編碼範圍廣闊得多,可以表示幾乎所有的語言字符;2、存儲空間不同,ascii通常使用1個位元組來儲存一個字符,而unicode可能使用2個或更多的位元組來儲存一個字符;3、相容性不同等等。

Python內建類型str原始碼分析 Python內建類型str原始碼分析 May 09, 2023 pm 02:16 PM

1Unicode電腦儲存的基本單位是位元組,由8個位元組組成。由於英文只由26個字母加若干符號組成,因此英文字元可以直接用位元組來保存。但是其他語言(例如中日韓等),由於字元眾多,不得不使用多個位元組來進行編碼。隨著電腦科技的傳播,非拉丁文字元編碼技術不斷發展,但是仍有兩個比較大的限制:不支援多語言:一種語言的編碼方案不能用於另一種語言沒有統一標準:例如中文就有GBK、GB2312、GB18030等多種編碼標準由於編碼方式不統一,開發人員就需要在不同編碼之間來回轉換,不可避免地會出現很多錯

Python中__str__和__repr__有什麼異同點 Python中__str__和__repr__有什麼異同點 Apr 29, 2023 pm 07:58 PM

__str__和__repr__有什麼異同?字串的表示形式我們都知道,Python的內建函數repr()能夠把物件用字串的形式表達出來,方便我們辨認。這就是“字串表示形式”。 repr()就是透過__repr__這個特殊方法得到一個物件的字串表示形式的。如果沒有實作__repr__,當我們在控制台裡列印一個向量的實例時,得到的字串可能會是。 >>>classExample:pass>>>print(str(Example()))>>>

See all articles