ホームページ  >  記事  >  バックエンド開発  >  PHP で UTF-8 文字から UCS-2 コード ポイントを抽出するにはどうすればよいですか?

PHP で UTF-8 文字から UCS-2 コード ポイントを抽出するにはどうすればよいですか?

DDD
DDDオリジナル
2024-10-31 18:00:15237ブラウズ

How to Extract UCS-2 Code Points from UTF-8 Characters in PHP?

PHP での UTF-8 文字の UCS-2 コード ポイントの決定

当面のタスクは、UCS-2 コード ポイントを抽出することです指定された UTF-8 文字列内の文字の場合。これを実現するには、カスタム PHP 関数を定義できます。

まず、UTF-8 エンコード スキームを理解することが重要です。各文字は、Unicode コード ポイントに応じて 1 ~ 4 バイトのシーケンスで表されます。各バイト サイズの範囲は次のとおりです。

  • 0xxxxxxx: 1 バイト
  • 110xxxxx 10xxxxxx: 2 バイト
  • 1110xxxx 10xxxxxx 10xxxxxx: 3 バイト
  • 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx: 4 バイト

文字あたりのバイト数を決定するには、最初のバイトを調べます:

  • 0: 1 バイト文字
  • 110 :全角文字
  • 1110: 3バイト文字
  • 11110:4バイト文字
  • 10:継続バイト
  • 11111:無効文字

バイト数決定後、ビット操作を使用してコードを抽出できます。 point.

カスタム PHP 関数:

上記の分析に基づいて、単一の UTF-8 文字を入力として受け取り、その UCS を返すカスタム PHP 関数を次に示します。 2 コードポイント:

<code class="php">function get_ucs2_codepoint($char)
{
    // Initialize the code point
    $codePoint = 0;

    // Get the first byte
    $firstByte = ord($char);

    // Determine the number of bytes
    if ($firstByte < 128) {
        $bytes = 1;
    } elseif ($firstByte < 192) {
        $bytes = 2;
    } elseif ($firstByte < 224) {
        $bytes = 3;
    } elseif ($firstByte < 240) {
        $bytes = 4;
    } else {
        // Invalid character
        return -1;
    }

    // Shift and extract code point
    switch ($bytes) {
        case 1:
            $codePoint = $firstByte;
            break;
        case 2:
            $codePoint = ($firstByte & 0x1F) << 6;
            $codePoint |= ord($char[1]) & 0x3F;
            break;
        case 3:
            $codePoint = ($firstByte & 0x0F) << 12;
            $codePoint |= (ord($char[1]) & 0x3F) << 6;
            $codePoint |= ord($char[2]) & 0x3F;
            break;
        case 4:
            $codePoint = ($firstByte & 0x07) << 18;
            $codePoint |= (ord($char[1]) & 0x3F) << 12;
            $codePoint |= (ord($char[2]) & 0x3F) << 6;
            $codePoint |= ord($char[3]) & 0x3F;
            break;
    }

    return $codePoint;
}</code>

例使用法:

この関数を使用するには、入力として UTF-8 文字を指定するだけです:

<code class="php">$char = "ñ";
$codePoint = get_ucs2_codepoint($char);
echo "UCS-2 code point: $codePoint\n";</code>

出力:

UCS-2 code point: 241

以上がPHP で UTF-8 文字から UCS-2 コード ポイントを抽出するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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