ホームページ php教程 php手册 PHP自动识别字符集编码并完成转码

PHP自动识别字符集编码并完成转码

May 25, 2016 pm 04:44 PM
キャラクターセット コーディング 自動識別

原理很简单,因为gb2312/gbk是中文两字节,这两个字节是有取值范围的,而utf-8中汉字是三字节,同样每个字节也有取值范围,而英文不管在何种编码情况下,都是小于128,只占用一个字节,全角除外.

在PHP处理页面的时候,我们对于字符集的转换都是采用了iconv或者mb_convert等函数,但这其实是有一个前提的,即我们事先得知道in和out是什么样的编码,我们才能进行正确的转换.

下面这个函数,就可以在不知道源字符串编码的情况下,自动判断其编码并进行转换,虽然只支持UTF8编码和GB2312编码,但对于国内绝大多数网站来说,已经够用了,代码如下:

<?php
function safeEncoding($string, $outEncoding = &#39;UTF-8&#39;) {
    $encoding = "UTF-8";
    for ($i = 0; $i < 128) continue;
    if ((ord($string{$i}) & 224) == 224) {
        //第一个字节判断通过
        $char = $string{++$i};
        if ((ord($char) & 128) == 128) {
            //第二个字节判断通过
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                $encoding = "UTF-8";
                break;
            }
        }
    }
    if ((ord($string{$i}) & 192) == 192) {
        //第一个字节判断通过
        $char = $string{++$i};
        if ((ord($char) & 128) == 128) {
            //第二个字节判断通过
            $encoding = "GB2312";
            break;
        }
    }
}
if (strtoupper($encoding) == strtoupper($outEncoding)) return $string;
else return iconv($encoding, $outEncoding, $string);
}
?>
ログイン後にコピー

识别汉字编码,因为YBlog用的是utf-8,如果引用通告发过来的是gb2312的编码的话,需要可以识别并完成编码转换,代码如下:

<?php
function safeEncoding($string, $outEncoding = &#39;UTF-8&#39;) {
    $encoding = "UTF-8";
    for ($i = 0; $i < strlen($string); $i++) {
        if (ord($string{$i}) < 128) continue;
        if ((ord($string{$i}) & 224) == 224) {
            //第一个字节判断通过
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                //第二个字节判断通过
                $char = $string{++$i};
                if ((ord($char) & 128) == 128) {
                    $encoding = "UTF-8";
                    break;
                }
            }
        }
        if ((ord($string{$i}) & 192) == 192) {
            //第一个字节判断通过
            $char = $string{++$i};
            if ((ord($char) & 128) == 128) {
                //第二个字节判断通过
                $encoding = "GB2312";
                break;
            }
        }
    }
    if (strtoupper($encoding) == strtoupper($outEncoding)) return $string;
    else return iconv($encoding, $outEncoding, $string);
}
?>
ログイン後にコピー

               
               

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、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衣類リムーバー

Video Face Swap

Video Face Swap

完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

11 の一般的な分類特徴エンコード技術 11 の一般的な分類特徴エンコード技術 Apr 12, 2023 pm 12:16 PM

機械学習アルゴリズムは数値入力のみを受け入れるため、カテゴリカルな特徴が見つかった場合は、そのカテゴリカルな特徴をエンコードします。この記事では、11 の一般的なカテゴリカル変数のエンコード方法を要約します。 1. ONE HOT エンコーディング 最も一般的で一般的に使用されているエンコーディング方式は One Hot Enoding です。 n 個の観測値と d 個の個別の値を持つ単一の変数は、n 個の観測値を持つ d 個のバイナリ変数に変換され、各バイナリ変数はビット (0, 1) で識別されます。例: コーディング後の最も簡単な実装は、パンダの get_dummiesnew_df=pd.get_dummies(columns=[‘Sex’], data=df)2 を使用することです。

utf8 でエンコードされた中国語の文字は何バイトを占めますか? utf8 でエンコードされた中国語の文字は何バイトを占めますか? Feb 21, 2023 am 11:40 AM

UTF8 でエンコードされた中国語文字は 3 バイトを占めます。 UTF-8 エンコードでは、1 つの中国語文字は 3 バイトに相当し、1 つの中国語の句読点は 3 バイトを占めますが、Unicode エンコードでは、1 つの中国語文字 (繁体字中国語を含む) は 2 バイトに相当します。 UTF-8 は各文字のエンコードに 1 ~ 4 バイトを使用します。1 つの US-ASCIl 文字のエンコードには 1 バイトのみが必要です。ラテン語、ギリシャ語、キリル文字、アルメニア語、および発音区別符号付きのヘブライ語。アラビア語、シリア語およびその他の文字は 2 バイトが必要です。エンコーディング。

ナレッジ グラフ: 大規模モデルの理想的なパートナー ナレッジ グラフ: 大規模モデルの理想的なパートナー Jan 29, 2024 am 09:21 AM

大規模言語モデル (LLM) は、滑らかで一貫したテキストを生成する機能を備えており、人工知能の会話や創造的な文章などの分野に新たな可能性をもたらします。ただし、LLM にはいくつかの重要な制限もあります。まず、彼らの知識はトレーニング データから認識されたパターンに限定されており、世界に対する真の理解が欠けています。第 2 に、推論スキルには限界があり、論理的な推論を行ったり、複数のデータ ソースからの事実を融合したりすることができません。より複雑で自由回答の質問に直面すると、LLM の答えは「幻想」として知られる不条理または矛盾したものになる場合があります。したがって、LLM はいくつかの面では非常に便利ですが、複雑な問題や現実世界の状況を扱う場合には、依然として一定の制限があります。これらのギャップを埋めるために、検索拡張生成 (RAG) システムが近年登場しました。

いくつかの一般的なエンコード方法 いくつかの一般的なエンコード方法 Oct 24, 2023 am 10:09 AM

一般的なエンコード方法には、ASCII エンコード、Unicode エンコード、UTF-8 エンコード、UTF-16 エンコード、GBK エンコードなどがあります。詳細な紹介: 1. ASCII エンコードは、英語の文字、数字、句読点、制御文字などを含む 128 文字を表すために 7 ビット 2 進数を使用する、最も初期の文字エンコード標準です; 2. Unicode エンコードは、文字を表すために使用される方法です。世界中のすべての文字 各文字に固有のデジタル コード ポイントを割り当てる文字の標準的なエンコード方式、3. UTF-8 エンコードなど。

PHP コーディングのヒント: 偽造防止検証機能を備えた QR コードを生成するには? PHP コーディングのヒント: 偽造防止検証機能を備えた QR コードを生成するには? Aug 17, 2023 pm 02:42 PM

PHP コーディングのヒント: 偽造防止検証機能を備えた QR コードを生成するには?電子商取引やインターネットの発展に伴い、QRコードはさまざまな業界で使用されることが増えています。 QRコードの利用にあたっては、製品の安全性を確保し、偽造を防止するために、QRコードに偽造防止検証機能を付加することが非常に重要です。この記事では、PHPを使用して偽造防止検証機能付きQRコードを生成する方法と、対応するコード例を紹介します。始める前に、次の必要なツールとライブラリを準備する必要があります: PHPQRCode: PHP

Oracleデータベースの文字セットを変更する方法を詳しく解説 Oracleデータベースの文字セットを変更する方法を詳しく解説 Mar 02, 2024 pm 03:18 PM

Oracle データベースのキャラクタ セットを変更する方法の詳細な説明 Oracle データベースは、簡体字中国語のキャラクタ セット、繁体字中国語のキャラクタ セット、英語のキャラクタ セットなど、複数のキャラクタ セットをサポートする強力なリレーショナル データベース管理システムです。実際のアプリケーションでは、データベースのキャラクタ セットを変更する必要がある状況が発生することがあります。この記事では、Oracle データベースのキャラクタ セットを変更する方法を詳しく紹介し、読者の参考となる具体的なコード例を示します。 1. 現在のデータベース キャラクタ セットを確認する データベース キャラクタ セットを変更する前に、まず現在のデータベース キャラクタ セットを確認する必要があります。

HDB3 エンコード ルールとは何ですか? HDB3 エンコード ルールとは何ですか? Aug 29, 2023 pm 01:38 PM

コーディング規則は次のとおりです: 1. 前のコードが 0 で現在のデータ ビットが 0 の場合、コードは 0; 2. 前のコードが 0 で現在のデータ ビットが 1 の場合、コードはバイポーラ パルス (+A)または - A) カウンターは 1 増加します; 3. 前のコードが 1 で現在のデータ ビットが 1 の場合、コードは 0 でカウンターは 1 増加します; 4. 前のコードが 1 の場合, 現在のデータ ビットは 0, エンコード方式はカウンタのパリティに基づいて決定されます。偶数の場合、エンコードは (+B または -B) です。奇数の場合、エンコードは 0 です。レベルとカウンタがクリアされるなどです。

PHPデータベースクエリ結果のエンコードの問題を解決する方法 PHPデータベースクエリ結果のエンコードの問題を解決する方法 Mar 21, 2023 am 11:49 AM

PHP は、動的な Web ページやアプリケーションの作成に使用できる人気のある Web プログラミング言語です。実際のアプリケーションでは、PHP は多くの場合、データのクエリと処理を行うためにデータベースと対話する必要があります。ただし、PHP を使用してデータベースから結果を取得する場合、エンコードの問題が発生する可能性があり、文字化けが発生することがよくあります。では、PHP データベースのクエリ結果のエンコードの問題を解決するにはどうすればよいでしょうか?

See all articles