ホームページ >バックエンド開発 >PHPチュートリアル >PHP で UTF-8 文字を UCS-2 コードポイントに変換するにはどうすればよいですか?

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

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-03 02:09:29484ブラウズ

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

UTF-8 文字を UCS-2 コード ポイントに変換する

この記事では、UCS-2 コード ポイントを抽出する方法について説明します。 UTF-8 文字列内の文字の数。このプロセスと PHP バージョン 4 または 5 での実装について詳しく説明します。

UTF-8 について

UTF-8 は、文字エンコーディング標準です。 1 ~ 4 バイトを使用して Unicode 文字を表します。特定の文字のバイト数を確認するには、先頭のバイトを調べます:

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

UCS-2 への変換

UCS-2 は、UTF-16 とも呼ばれ、ほとんどの文字を表現できる文字エンコード形式です。ユニコード文字。 UTF-8 から UCS-2 への変換では、文字ごとのバイト数が次のように考慮されます:

  • 1 バイト文字: コード ポイントは直接 UTF-8 バイトです。 value.
  • 2 バイト文字: 最初のバイトを 6 ビット左にシフトし、
  • 3 バイト文字: 最初のバイトを 12 ビット左にシフトし、2 番目のバイトを 6 ビット左にシフトし、3 番目のバイトとビットごとの OR を計算します。 .

PHP での実装4/5

PHP バージョン 4 または 5 の場合、この変換を実行する関数を実装できます:

<code class="php">function utf8_char_to_ucs2($utf8) {
    if (!(ord($utf8[0]) & 0x80)) {
        return ord($utf8[0]);
    } elseif ((ord($utf8[0]) & 0xE0) == 0xC0) {
        return ((ord($utf8[0]) & 0x1F) << 6) | (ord($utf8[1]) & 0x3F);
    } elseif ((ord($utf8[0]) & 0xF0) == 0xE0) {
        return ((ord($utf8[0]) & 0x0F) << 12) | ((ord($utf8[1]) & 0x3F) << 6) | (ord($utf8[2]) & 0x3F);
    } else {
        return null; // Handle invalid characters or characters beyond UCS-2 range
    }
}</code>

使用例

<code class="php">$utf8 = "hello";
for ($i = 0; $i < strlen($utf8); $i++) {
    $ucs2_codepoint = utf8_char_to_ucs2($utf8[$i]);
    printf("Code point for '%s': %d\n", $utf8[$i], $ucs2_codepoint);
}</code>

これは出力します:

Code point for 'h': 104
Code point for 'e': 101
Code point for 'l': 108
Code point for 'l': 108
Code point for 'o': 111

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

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