ホームページ  >  記事  >  バックエンド開発  >  PHP文字エンコード変換クラス関連コンテンツ

PHP文字エンコード変換クラス関連コンテンツ

jacklove
jackloveオリジナル
2018-06-09 11:10:332190ブラウズ

php 文字エンコード変換クラス は、ANSI、Unicode、Unicode ビッグ エンディアン、UTF-8、および UTF-8 Bom 変換をサポートします。

#4 つの一般的なテキスト ファイルのエンコード方法

ANSI エンコード:

ファイル ヘッダーなし (ファイル エンコードの先頭にある象徴的なバイト)

ANSI エンコードでは、英数字が 1 バイトを占め、中国語の文字が 2 バイトを占めます

キャリッジ リターンおよびライン フィード文字、シングル バイト、16 進表現は 0d 0a

UNICODE エンコード:

#ファイル ヘッダー、16 進表現は FF FE

各文字は 2 バイトでエンコードされます

キャリッジ リターンおよび改行文字、ダブル バイト、16 進表現は 000d 000a

##Unicode ビッグ エンディアン エンコーディング:

16 進表現ファイル ヘッダーのファイル ヘッダーは FE FF

次のエンコーディングでは、文字の高位ビットが前に、低位ビットが後ろに配置されます。これは、Unicode エンコーディングを逆にしたものとまったく同じです

キャリッジ リターンとライン フィード文字、ダブル バイト、16 進表現は 0d00 0a00

UTF-8 エンコード:

ファイル ヘッダー、16 進表現は EF BB BF

UTF-8 は Unicode の可変長です 文字エンコーディング、数字、文字、キャリッジ リターン、漢字は 3 バイトで表現されます。

復帰と改行、1 バイト、16 進表現 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==&#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
?>

デモ:

unicode ビッグ エンディアンから utf-8 bom

afe612444d886363ae90ca7ae28be542convert($str);
file_put_contents('response/utf-8bom.txt', $response, true);
?>
php 文字エンコーディング変換クラス。ANSI、Unicode、Unicode ビッグ エンディアン、UTF-8、UTF-8 Bom 関連コンテンツの相互変換をサポートします。関連コンテンツについては、php 中国語 Web サイトに注目してください。 関連推奨事項:

php str_replace 指定回数置換する方法の説明

使用方法についてheader、headers_sent、headers_list、header_remove 説明

PDO を介して mysql によって返されるフィールドの整数型を文字列型に変更する解決策

以上がPHP文字エンコード変換クラス関連コンテンツの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。