Rumah pembangunan bahagian belakang tutorial 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编码:

无文件头(文件编码开头标志性字节)

ANSI编码字母数字占一个字节,汉字占两个字节

回车换行符,单字节, 十六进制表示为0d  0a

UNICODE编码:

文件头,十六进制表示为FF FE

每一个字符都用两个字节编码

回车换行符, 双字节,十六进制表示为 000d  000a

Unicode big endian编码:

文件头十六进制表示为FE FF

后面编码是把字符的高位放在前面,低位放在后面,正好和Unicode编码颠倒

回车换行符,双字节,十六进制表示为0d00  0a00

UTF-8 编码:

文件头,十六进制表示为EF BB BF

UTF-8是Unicode的一种变长字符编码,数字、字母、回车、换行都用一个字节表示,汉字占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

?>
Salin selepas log masuk

demo:unicode big endian 转为 utf-8+bom

<?php require "CharsetConv.class.php";

$str = file_get_contents(&#39;source/unicodebe.txt&#39;);

$obj = new CharsetConv(&#39;unicodebe&#39;, &#39;utf-8bom&#39;);
$response = $obj->convert($str);

file_put_contents('response/utf-8bom.txt', $response, true);
?>
Salin selepas log masuk

源码下载地址:点击查看

以上就介绍了php 字符编码转换类,支持ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom 互相转换,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk menukar unicode kepada bahasa Cina Bagaimana untuk menukar unicode kepada bahasa Cina Dec 14, 2023 am 10:57 AM

Unicode ialah standard pengekodan aksara yang digunakan untuk mewakili pelbagai bahasa dan simbol. Untuk menukar pengekodan Unicode kepada aksara Cina, anda boleh menggunakan fungsi terbina dalam Python chr() dan ord().

Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar Unicode JSON kepada bahasa Cina Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar Unicode JSON kepada bahasa Cina Mar 05, 2024 pm 02:48 PM

Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar JSONUnicode kepada Bahasa Cina Semasa pembangunan, kami sering menghadapi situasi di mana kami perlu memproses data JSON dan pengekodan Unicode dalam JSON akan menyebabkan kami beberapa masalah dalam beberapa senario, terutamanya apabila kami perlu menukar Unicode Apabila pengekodan ditukar kepada aksara Cina. Dalam PHP, terdapat beberapa kaedah yang boleh membantu kami mencapai proses penukaran ini Kaedah biasa akan diperkenalkan di bawah dan contoh kod khusus akan disediakan. Mula-mula, mari kita fahami dulu Un dalam JSON

Cuba kaedah untuk menyelesaikan masalah aksara Cina yang kacau dalam Eclipse Cuba kaedah untuk menyelesaikan masalah aksara Cina yang kacau dalam Eclipse Jan 03, 2024 pm 05:28 PM

Adakah anda terganggu dengan watak Cina yang kacau dalam Eclipse? Untuk mencuba penyelesaian ini, anda memerlukan contoh kod khusus 1. Pengenalan latar belakang Dengan perkembangan berterusan teknologi komputer, bahasa Cina memainkan peranan yang semakin penting dalam pembangunan perisian. Walau bagaimanapun, banyak pembangun menghadapi masalah kod bercelaru apabila menggunakan Eclipse untuk pembangunan bahasa Cina, yang menjejaskan kecekapan kerja. Kemudian, artikel ini akan memperkenalkan beberapa masalah kod bercelaru biasa dan memberikan penyelesaian serta contoh kod yang sepadan untuk membantu pembaca menyelesaikan masalah kod bercelaru bahasa Cina dalam Eclipse. 2. Masalah kod bercelaru biasa dan fail penyelesaian

Tutorial PHP: Cara Menukar Unikod JSON kepada Aksara Cina Tutorial PHP: Cara Menukar Unikod JSON kepada Aksara Cina Mar 05, 2024 pm 06:36 PM

JSON (JavaScriptObjectNotation) ialah format pertukaran data ringan yang biasa digunakan untuk pertukaran data antara aplikasi web. Semasa memproses data JSON, kami sering menemui aksara Cina yang dikodkan Unikod (seperti "u4e2du6587") dan perlu menukarnya kepada aksara Cina yang boleh dibaca. Dalam PHP, kita boleh mencapai penukaran ini melalui beberapa kaedah mudah. Seterusnya, kami akan memperincikan cara menukar JSONUnico

Selesaikan masalah pengekodan set aksara Unicode yang tidak konsisten apabila Java menyambung ke pangkalan data MySQL Selesaikan masalah pengekodan set aksara Unicode yang tidak konsisten apabila Java menyambung ke pangkalan data MySQL Jun 10, 2023 am 11:39 AM

Dengan perkembangan teknologi seperti data besar dan pengkomputeran awan, pangkalan data telah menjadi salah satu asas penting dalam pemformatan perusahaan. Dalam aplikasi yang dibangunkan di Java, menyambung ke pangkalan data MySQL telah menjadi kebiasaan. Walau bagaimanapun, dalam proses ini, kita sering menghadapi masalah berduri - pengekodan set aksara unikod tidak konsisten. Ini bukan sahaja akan menjejaskan kecekapan pembangunan kami, tetapi juga menjejaskan prestasi dan kestabilan aplikasi. Artikel ini akan memperkenalkan cara menyelesaikan masalah ini dan menjadikan Java menyambung ke pangkalan data MySQL dengan lebih lancar. 1. Unicode

Apakah perbezaan antara unicode dan ascii Apakah perbezaan antara unicode dan ascii Sep 06, 2023 am 11:56 AM

Perbezaan antara unicode dan ascii termasuk julat pengekodan yang berbeza, ruang storan yang berbeza dan keserasian yang berbeza. Pengenalan terperinci: 1. Julat pengekodan adalah berbeza Julat pengekodan ASCII ialah 0-127, yang digunakan terutamanya untuk mewakili huruf Inggeris Julat pengekodan Unicode adalah lebih luas dan boleh mewakili hampir semua aksara bahasa ruang berbeza ASCII biasanya Gunakan 1 bait untuk menyimpan aksara, manakala unicode mungkin menggunakan 2 atau lebih bait untuk menyimpan aksara 3. Keserasian yang berbeza, dsb.

Analisis kod sumber str jenis terbina dalam Python Analisis kod sumber str jenis terbina dalam Python May 09, 2023 pm 02:16 PM

1Unit asas storan komputer Unicode ialah bait, yang terdiri daripada 8 bit. Memandangkan bahasa Inggeris hanya terdiri daripada 26 huruf ditambah beberapa simbol, aksara Inggeris boleh disimpan terus dalam bait. Tetapi bahasa lain (seperti Cina, Jepun, Korea, dll.) perlu menggunakan berbilang bait untuk pengekodan kerana bilangan aksara yang banyak. Dengan penyebaran teknologi komputer, teknologi pengekodan aksara bukan Latin terus berkembang, tetapi masih terdapat dua batasan utama: tiada sokongan berbilang bahasa: skema pengekodan satu bahasa tidak boleh digunakan dalam bahasa lain dan tiada standard bersatu: contohnya Terdapat banyak piawaian pengekodan dalam bahasa Cina seperti GBK, GB2312, GB18030, dsb. Memandangkan kaedah pengekodan tidak bersatu, pembangun perlu menukar berulang-alik antara pengekodan yang berbeza, dan banyak ralat pasti akan berlaku.

Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python? Apakah persamaan dan perbezaan antara __str__ dan __repr__ dalam Python? Apr 29, 2023 pm 07:58 PM

Apakah persamaan dan perbezaan antara __str__ dan __repr__? Kita semua tahu perwakilan rentetan fungsi repr() boleh menyatakan objek dalam bentuk rentetan untuk memudahkan pengenalan kita. Ini ialah "perwakilan rentetan". repr() mendapatkan perwakilan rentetan objek melalui kaedah khas __repr__. Jika __repr__ tidak dilaksanakan, apabila kita mencetak contoh vektor ke konsol, rentetan yang terhasil mungkin. >>>classContoh:lulus>>>cetak(str(Contoh()))>>>

See all articles