php utf8怎么转unicode

Jul 18, 2020 am 09:29 AM
unicode utf8

php utf8转unicode的方法:首先创建一个PHP示例文件;然后定义一个“utf8_str_to_unicode”方法;接着通过ord以及dechex等函数实现转换功能;最后执行该文件即可。

php utf8怎么转unicode

PHP实现Unicode和Utf-8编码的互相转换

最近恰好要用到unicode编码的转换,就去查了一下php的库函数,居然没找到一个函数可以对字符串进行Unicode的编码和解码!也罢,找不到的话就自己实现一下了。。。

Unicode和Utf-8编码的区别

Unicode是一个字符集,而UTF-8是Unicode的其中一种,Unicode是定长的都为双字节,而UTF-8是可变的,对于汉字来说Unicode占有的字节比UTF-8占用的字节少1个字节。Unicode为双字节,而UTF-8中汉字占三个字节。

UTF-8编码字符理论上可以最多到6个字节长,然而16位BMP(Basic Multilingual Plane)字符最多只用到3字节长。下面看一下UTF-8编码表:

U-00000000 - U-0000007F: 0xxxxxxx 
U-00000080 - U-000007FF: 110xxxxx 10xxxxxx 
U-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx 
U-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 
U-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
Salin selepas log masuk

xxx 的位置由字符编码数的二进制表示的位填入, 越靠右的 x 具有越少的特殊意义,只用最短的那个足够表达一个字符编码数的多字节串。 注意在多字节串中, 第一个字节的开头"1"的数目就是整个串中字节的数目。而第一行中以0开头,是为了兼容ASCII编码,为一个字节,第二行就为双字节字符串,第三行为3字节,如汉字就属于这种,以此类推。(个人认为:其实我们可以简单的把前面的1的个数看成字节数)

Unicode怎么转换成Utf-8呢

为了要将Unicode转换为UTF-8,当然要知道他们的区别到底在什么地方。下面来看一下,在Unicode中的编码是怎样转换成UTF-8的,在UTF-8中,如果一个字符的字节小于0x80(128)则为ASCII字符,占一个字节,可以不用转换,因为UTF-8兼容ASCII编码。假如在Unicode中汉字“你”的编码为“u4F60”,把它转换为二进制为100111101100000,然后按照UTF-8的方法进行转换。可以将Unicode二进制从低位往高位取出二进制数字,每次取6位,如上述的二进制就可以分别取出为如下所示的格式,前面按格式填补,不足8位用0填补。

unicode: 100111101100000                   4F60
utf-8:    11100100,10111101,10100000       E4BDA0
Salin selepas log masuk

从上面就可以很直观的看出Unicode到UTF-8之间的转换,当然知道了UTF-8的格式后,就可以进行逆运算,就是按照格式把它在二进制中的相应位置上取出,然后在转换就是所得到的Unicode字符了(这个运算可以通过“位移”来完成)。如上述的“你”的转换,由于其值大于0x800小于0x10000,因此可以判断为三字节存储,则最高位需要向右移“12”位再根据三字节格式的最高位为11100000(0xE0)求或(|)就可以得到最高位的值了。同理第二位则是右移“6”位,则还剩下最高位和第二位的二进制值,可以通过与111111(0x3F)求按位于(&)操作,再和11000000(0x80)求或(|)。第三位就不用移位了,只要直接取最后六位(与111111(ox3F)取&),在与11000000(0x80)求或(|)。

Utf-8怎么逆转回Unicode呢

当然在UTF-8到Unicode的转换也是通过移位等来完成的,就是把UTF-8那些格式相应的位置的二进制数给揪出来。在上述例子中“你”为三个字节,因此要每个字节进行处理,有高位到低位进行处理。

在UTF-8中“你”为11100100,10111101,10100000。从高位起即第一个字节11100100就是把其中的"0100"给取出来,这个很简单只要和11111(0x1F)取与(&),由三字节可以得知最到位肯定位于12位之前,因为每次取六位。

所以还要将得到的结果左移12位,最高位也就这样完成了0100,000000,000000。而第二位则是要把“111101”给取出来,则只需将第二字节10111101和111111(0x3F)取与(&)。在将所得到的结果左移6位与最高字节所得的结果取或(|),第二位就这样完成了,得到的结果为0100,111101,000000。

以此类推最后一位直接与111111(0x3F)取与(&),再与前面所得的结果取或(|)即可得到结果0100,111101,100000。

PHP代码实现

/**
 * 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;
}
Salin selepas log masuk

测试一下了

$utf8_str = &#39;我&#39;;
//这是汉字“你”的Unicode编码
$unicode_str = &#39;4f6b&#39;;
//输出 6211
echo utf8_str_to_unicode($utf8_str) . "<br/>";
//输出汉字“你”
echo unicode_str_to_utf8($unicode_str);
Salin selepas log masuk

以上这些转换是针对中文汉字【往大了说是非ASCII】的测试,因为如果是ASCII的话,转来转去都是一样的,也用不着费那么大工夫。

还有就是这两个函数只是简单的实现了一下,只支持单个字符【一个完整的utf8字符或是一个完整的Unicode字符】互相转换,大家如果明白了得话就可以尽情去扩展了。。。

推荐:《PHP教程

Atas ialah kandungan terperinci php utf8怎么转unicode. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Arahan sembang dan cara menggunakannya
1 bulan yang lalu By 尊渡假赌尊渡假赌尊渡假赌

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Berapa banyak bait yang diduduki oleh aksara Cina yang dikodkan utf8? Berapa banyak bait yang diduduki oleh aksara Cina yang dikodkan utf8? Feb 21, 2023 am 11:40 AM

Aksara Cina yang dikodkan UTF8 menduduki 3 bait. Dalam pengekodan UTF-8, satu aksara Cina bersamaan dengan tiga bait, dan satu tanda baca bahasa Cina menduduki tiga bait manakala dalam pengekodan Unicode, satu aksara Cina (termasuk bahasa Cina tradisional) adalah sama dengan dua bait; UTF-8 menggunakan 1~4 bait untuk mengekod setiap aksara Satu aksara AS-ASCIl hanya memerlukan 1 bait untuk mengekod Latin, Yunani, Cyrillic, Armenia dan Ibrani dengan tanda diakritik , Arab, Syria dan huruf lain pengekodan.

Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar Unicode JSON kepada bahasa Cina Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar Unicode JSON kepada bahasa Cina Mar 05, 2024 pm 02:48 PM

Pemahaman mendalam tentang PHP: Kaedah pelaksanaan menukar JSONUnicode kepada Bahasa Cina Semasa pembangunan, kami sering menghadapi situasi di mana kami perlu memproses data JSON dan pengekodan Unicode dalam JSON akan menyebabkan kami beberapa masalah dalam beberapa senario, terutamanya apabila kami perlu menukar Unicode Apabila pengekodan ditukar kepada aksara Cina. Dalam PHP, terdapat beberapa kaedah yang boleh membantu kami mencapai proses penukaran ini Kaedah biasa akan diperkenalkan di bawah dan contoh kod khusus akan disediakan. Mula-mula, mari kita fahami dulu Un dalam JSON

Bagaimana untuk menukar unicode kepada bahasa Cina Bagaimana untuk menukar unicode kepada bahasa Cina Dec 14, 2023 am 10:57 AM

Unicode ialah standard pengekodan aksara yang digunakan untuk mewakili pelbagai bahasa dan simbol. Untuk menukar pengekodan Unicode kepada aksara Cina, anda boleh menggunakan fungsi terbina dalam Python chr() dan ord().

Cuba kaedah untuk menyelesaikan masalah aksara Cina yang kacau dalam Eclipse Cuba kaedah untuk menyelesaikan masalah aksara Cina yang kacau dalam Eclipse Jan 03, 2024 pm 05:28 PM

Adakah anda terganggu dengan watak Cina yang kacau dalam Eclipse? Untuk mencuba penyelesaian ini, anda memerlukan contoh kod khusus 1. Pengenalan latar belakang Dengan perkembangan berterusan teknologi komputer, bahasa Cina memainkan peranan yang semakin penting dalam pembangunan perisian. Walau bagaimanapun, banyak pembangun menghadapi masalah kod bercelaru apabila menggunakan Eclipse untuk pembangunan bahasa Cina, yang menjejaskan kecekapan kerja. Kemudian, artikel ini akan memperkenalkan beberapa masalah kod bercelaru biasa dan memberikan penyelesaian serta contoh kod yang sepadan untuk membantu pembaca menyelesaikan masalah kod bercelaru bahasa Cina dalam Eclipse. 2. Masalah kod bercelaru biasa dan fail penyelesaian

Tutorial PHP: Cara Menukar Unikod JSON kepada Aksara Cina Tutorial PHP: Cara Menukar Unikod JSON kepada Aksara Cina Mar 05, 2024 pm 06:36 PM

JSON (JavaScriptObjectNotation) ialah format pertukaran data ringan yang biasa digunakan untuk pertukaran data antara aplikasi web. Semasa memproses data JSON, kami sering menemui aksara Cina yang dikodkan Unikod (seperti "u4e2du6587") dan perlu menukarnya kepada aksara Cina yang boleh dibaca. Dalam PHP, kita boleh mencapai penukaran ini melalui beberapa kaedah mudah. Seterusnya, kami akan memperincikan cara menukar JSONUnico

Selesaikan masalah pengekodan set aksara Unicode yang tidak konsisten apabila Java menyambung ke pangkalan data MySQL Selesaikan masalah pengekodan set aksara Unicode yang tidak konsisten apabila Java menyambung ke pangkalan data MySQL Jun 10, 2023 am 11:39 AM

Dengan perkembangan teknologi seperti data besar dan pengkomputeran awan, pangkalan data telah menjadi salah satu asas penting dalam pemformatan perusahaan. Dalam aplikasi yang dibangunkan di Java, menyambung ke pangkalan data MySQL telah menjadi kebiasaan. Walau bagaimanapun, dalam proses ini, kita sering menghadapi masalah berduri - pengekodan set aksara unikod tidak konsisten. Ini bukan sahaja akan menjejaskan kecekapan pembangunan kami, tetapi juga menjejaskan prestasi dan kestabilan aplikasi. Artikel ini akan memperkenalkan cara menyelesaikan masalah ini dan menjadikan Java menyambung ke pangkalan data MySQL dengan lebih lancar. 1. Unicode

Apakah perbezaan antara unicode dan ascii Apakah perbezaan antara unicode dan ascii Sep 06, 2023 am 11:56 AM

Perbezaan antara unicode dan ascii termasuk julat pengekodan yang berbeza, ruang storan yang berbeza dan keserasian yang berbeza. Pengenalan terperinci: 1. Julat pengekodan adalah berbeza Julat pengekodan ASCII ialah 0-127, yang digunakan terutamanya untuk mewakili huruf Inggeris Julat pengekodan Unicode adalah lebih luas dan boleh mewakili hampir semua aksara bahasa ruang berbeza ASCII biasanya Gunakan 1 bait untuk menyimpan aksara, manakala unicode mungkin menggunakan 2 atau lebih bait untuk menyimpan aksara 3. Keserasian yang berbeza, dsb.

Apa yang perlu dilakukan jika nod utf8 aksara Cina bercelaru Apa yang perlu dilakukan jika nod utf8 aksara Cina bercelaru Feb 08, 2023 am 10:29 AM

Penyelesaian kepada aksara Cina bercelaru dalam nod utf8: 1. Semak jenis "SarchName" melalui "typeof"; 2. Gunakan "Name=iconv.decode(name,'gbk')" untuk menukar pengekodan kepada utf8.

See all articles