ホームページ バックエンド開発 PHPチュートリアル PHP文字エンコード変換クラス、ANSI、Unicode、Unicodeビッグエンディアン、UTF-8、UTF-8+Bom相互変換をサポート

PHP文字エンコード変換クラス、ANSI、Unicode、Unicodeビッグエンディアン、UTF-8、UTF-8+Bom相互変換をサポート

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

phpの文字エンコーディング変換クラス。はANSI、Unicode、Unicodeビッグエンディアン、UTF-8、UTF-8+Bomなどの変換をサポートしています。 methododing methodingsoding anusiエンコード:


ファイルヘッダー(ファイルエンコードの開始時の署名バイト) 2 バイトを占有します


復帰と改行、シングルバイト、16 進表現は 0d 0a


UNICODE エンコード:


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


各キャラクター2つのバイトcarriageのリターンとラインフィードの文字、ダブルバイト、16進表現が000d 000d 000 000A 〜unicodeビッグエンディアンエンコード:


ファイルヘッダーの16進表現はFe ffです


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


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


UTF-8 エンコーディング:


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


UTF-8 は Unicode の可変長文字エンコーディングです。 、キャリッジリターン、ラインフィードはすべて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=='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

?>
ログイン後にコピー

デモ:
unicodeビッグエンディアンを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);
?>
ログイン後にコピー

ソースコードのダウンロードアドレス: クリックして表示

上記では、ANSI、Unicode、Unicode ビッグ エンディアン、UTF-8、UTF-8+Bom などの変換をサポートする PHP 文字エンコーディング変換クラスを紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。 。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Unicodeを中国語に変換する方法 Unicodeを中国語に変換する方法 Dec 14, 2023 am 10:57 AM

Unicode は、さまざまな言語や記号を表すために使用される文字エンコード標準です。 Unicode エンコードを中国語の文字に変換するには、Python の組み込み関数 chr() および ord() を使用できます。

PHPを深く理解する:JSON Unicodeを中国語に変換する実装方法 PHPを深く理解する:JSON Unicodeを中国語に変換する実装方法 Mar 05, 2024 pm 02:48 PM

PHP の深い理解: JSONUnicode を中国語に変換する実装方法 開発中、JSON データを処理する必要がある状況によく遭遇しますが、特に変換する必要がある場合、JSON 内の Unicode エンコードによっていくつかのシナリオで問題が発生します。 Unicode エンコードを漢字に変換する場合。 PHP では、この変換処理を実現するためのメソッドがいくつかありますが、以下では一般的なメソッドを紹介し、具体的なコード例を示します。まず、JSON の Un について理解しましょう

Eclipseの中国語文字化け問題を解決する方法を試す Eclipseの中国語文字化け問題を解決する方法を試す Jan 03, 2024 pm 05:28 PM

Eclipseで中国語の文字化けに悩んでいませんか?これらのソリューションを試すには、特定のコード サンプルが必要です。 1. 背景の紹介 コンピューター技術の継続的な発展に伴い、ソフトウェア開発において中国語がますます重要な役割を果たしています。しかし、多くの開発者は、中国の開発に Eclipse を使用するとコードの文字化けの問題に遭遇し、作業効率に影響を及ぼします。次に、この記事では、一般的なコードの文字化けの問題をいくつか紹介し、読者が Eclipse での中国語の文字化けコードの問題を解決できるように、対応する解決策とコード例を示します。 2. 一般的なコード文字化けの問題と解決策ファイル

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

ビッグ データやクラウド コンピューティングなどのテクノロジーの発展に伴い、データベースは企業情報化の重要な基盤の 1 つになりました。 Java で開発されたアプリケーションでは、MySQL データベースに接続することが標準になっています。ただし、このプロセスでは、一貫性のない Unicode 文字セットのエンコーディングという厄介な問題に遭遇することがよくあります。これは開発効率に影響を与えるだけでなく、アプリケーションのパフォーマンスと安定性にも影響します。この記事では、この問題を解決し、Java が MySQL データベースによりスムーズに接続できるようにする方法を紹介します。 1. ユニコード

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

1 Unicode コンピュータ ストレージの基本単位は 8 ビットで構成されるバイトです。英語は 26 文字といくつかの記号のみで構成されているため、英語の文字はバイト単位で直接格納できます。ただし、他の言語 (中国語、日本語、韓国語など) では、文字数が多いため、エンコードに複数のバイトを使用する必要があります。コンピューター技術の普及に伴い、非ラテン文字エンコード技術は発展を続けていますが、依然として 2 つの大きな制限があります。 多言語サポートがないこと。 ある言語のエンコード スキームを別の言語で使用することはできません。また、統一された標準もありません。たとえば、中国語には 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