Home >Backend Development >PHP Tutorial >PHP character encoding conversion class related content

PHP character encoding conversion class related content

jacklove
jackloveOriginal
2018-06-09 11:10:332284browse

php character encoding conversion class, supports ANSI, Unicode, Unicode big endian, UTF-8, and UTF-8 Bom conversion.

Four common text file encoding methods

ANSI encoding

No file header (the iconic byte at the beginning of the file encoding)

ANSI encoding alphanumeric occupies one byte and Chinese characters occupies two bytes

Carriage return and line feed character, single byte, hexadecimal representation is 0d 0a

UNICODE encoding:

File header, hexadecimal representation is FF FE

Each character is encoded with two bytes

Carriage return and line feed character, double byte, hexadecimal representation is 000d 000a

Unicode big endian encoding:

The hexadecimal representation of the file header is FE FF

The following encoding puts the high bit of the character in front and the low bit in the back, which is exactly the same as Unicode Encoding reversed

carriage return and line feed character, double byte, hexadecimal representation is 0d00 0a00

UTF-8 encoding :

File header, hexadecimal representation is EF BB BF

UTF-8 is a variable length of Unicode Character encoding, numbers, letters, carriage return, and line feed are all represented by one byte. Chinese characters occupy 3 bytes

Carriage return and line feed, single byte, hexadecimal representation Conversion principle for 0d 0a

: first convert the character encoding to UTF-8, and then convert from UTF-8 to the corresponding character encoding.

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==&#39;utf-8&#39;){ // 编码已经是utf-8,不用转
            return $str;
        }
        switch($this->_in_charset){
            case &#39;utf-8bom&#39;:
                $str = substr($str, 3);
                break;
            case &#39;ansi&#39;:
                $str = iconv(&#39;GBK&#39;, &#39;UTF-8//IGNORE&#39;, $str);
                break;
            case &#39;unicode&#39;:
                $str = iconv(&#39;UTF-16le&#39;, &#39;UTF-8//IGNORE&#39;, substr($str, 2));
                break;
            case &#39;unicodebe&#39;:
                $str = iconv(&#39;UTF-16be&#39;, &#39;UTF-8//IGNORE&#39;, substr($str, 2));
                break;
            default:
                break;
        }
        return $str;
    }
    /** 把UTF-8编码转换为输出编码
    * @param  String $str
    * @return String
    */
    private function convFromUtf8($str){
        if($this->_out_charset==&#39;utf-8&#39;){ // 输出编码已经是utf-8,不用转
            return $str;
        }
        switch($this->_out_charset){
            case &#39;utf-8bom&#39;:
                $str = "\xef\xbb\xbf".$str;
                break;
            case &#39;ansi&#39;:
                $str = iconv(&#39;UTF-8&#39;, &#39;GBK//IGNORE&#39;, $str);
                break;
            case &#39;unicode&#39;:
                $str = "\xff\xfe".iconv(&#39;UTF-8&#39;, &#39;UTF-16le//IGNORE&#39;, $str);
                break;
            case &#39;unicodebe&#39;:
                $str = "\xfe\xff".iconv(&#39;UTF-8&#39;, &#39;UTF-16be//IGNORE&#39;, $str);
                break;
            default:
                break;
        }
        return $str;
    }
} // class end
?>

demo: unicode big endian to utf-8 bom

afe612444d886363ae90ca7ae28be542convert($str);
file_put_contents('response/utf-8bom.txt', $response, true);
?>

php character encoding conversion class, supports ANSI, Unicode, Unicode big endian, UTF-8, UTF-8 Bom and other related content conversion , please pay attention to php Chinese website for more related content.

Related recommendations:

php str_replace explanation of the method of replacing a specified number of times

About the use of header, headers_sent, headers_list, header_remove Description

Solution to change the integer type of field returned by mysql through PDO to String type

The above is the detailed content of PHP character encoding conversion class related content. For more information, please follow other related articles on the PHP Chinese website!

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn