ホームページ  >  記事  >  バックエンド開発  >  PHPでutf8をunicodeに変換するにはどうすればよいですか?

PHPでutf8をunicodeに変換するにはどうすればよいですか?

coldplay.xixi
coldplay.xixiオリジナル
2020-07-13 10:17:172922ブラウズ

php で utf8 を Unicode に変換する方法: 最初に最初のバイトの 0100 を抽出し、次に結果を 12 ビット左にシフトし、次に 111101 を抽出し、結果を 6 ビット左にシフトして、得られた結果最上位バイトは OR 演算され、最後に、同様に、n 番目のビットが 111111 [0x3F] と直接 AND 演算されます。

PHPでutf8をunicodeに変換するにはどうすればよいですか?

utf8 を Unicode に変換する php メソッド:

もちろん、UTF-8 から Unicode への変換は次のとおりです。移行によっても行われます。ビットなどによって行われるのは、UTF-8 形式の対応する位置の 2 進数を抽出することです。

この例では、「you」は 3 バイトであるため、上位ビットから下位ビットまで各バイトを処理する必要があります。 UTF-8 では、「あなた」は 11100100,10111101,10100000 です。上位ビット、つまり最初のバイト 11100100 から「0100」を取り出します。これは非常に簡単です。11111 (0x1F) と AND (&) を取るだけです。3 バイトから、毎回 6 桁が取得されるため、最上位は 12 ビット目より前でなければなりません。したがって、得られた結果は 12 ビット左にシフトする必要があり、最上位ビットは 0100,000000,000000 になります。

2 番目のビットは「111101」を取り出すためのものなので、2 番目のバイト 10111101 と 111111 (0x3F) を AND (&) するだけで済みます。結果を 6 ビット左にシフトし、最上位バイトまたは (|) の結果を取得すると、2 番目のビットが完成し、結果は 0100,111101,000000 になります。同様に、最後の桁は 111111 (0x3F) と直接 AND (&) 演算され、次に前の結果と OR (|) 演算されて、結果 0100,111101,100000 が得られます。

/**
 * utf8字符转换成Unicode字符
 * @param [type] $utf8_str Utf-8字符
 * @return [type]      Unicode字符
 */
function utf8_str_to_unicode($utf8_str) {
  $unicode = 0;
  $unicode = (ord($utf8_str[0]) & 0x1F) << 12;
  $unicode |= (ord($utf8_str[1]) & 0x3F) << 6;
  $unicode |= (ord($utf8_str[2]) & 0x3F);
  return dechex($unicode);
}
/**
 * Unicode字符转换成utf8字符
 * @param [type] $unicode_str Unicode字符
 * @return [type]       Utf-8字符
 */
function unicode_to_utf8($unicode_str) {
  $utf8_str = &#39;&#39;;
  $code = intval(hexdec($unicode_str));
  //这里注意转换出来的code一定得是整形,这样才会正确的按位操作
  $ord_1 = decbin(0xe0 | ($code >> 12));
  $ord_2 = decbin(0x80 | (($code >> 6) & 0x3f));
  $ord_3 = decbin(0x80 | ($code & 0x3f));
  $utf8_str = chr(bindec($ord_1)) . chr(bindec($ord_2)) . chr(bindec($ord_3));
  return $utf8_str;
}

関連する学習の推奨事項: PHP プログラミングの入門から熟練度まで

以上がPHPでutf8をunicodeに変換するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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