Heim  >  Artikel  >  Backend-Entwicklung  >  So konvertieren Sie PHP utf8 in Unicode

So konvertieren Sie PHP utf8 in Unicode

藏色散人
藏色散人Original
2020-07-18 09:29:333397Durchsuche

So konvertieren Sie PHP utf8 in Unicode: Definieren Sie dann eine „utf8_str_to_unicode“-Methode. Implementieren Sie dann die Konvertierungsfunktion über die Funktionen ord und dechex.

So konvertieren Sie PHP utf8 in Unicode

PHP implementiert die gegenseitige Konvertierung zwischen Unicode und Utf-8-Kodierung

Seit kurzem muss ich zufällig Unicode verwenden Bei der Kodierungskonvertierung habe ich die Bibliotheksfunktionen von PHP überprüft, konnte aber keine Funktion finden, die Unicode-Strings kodieren und dekodieren kann! Wenn Sie es nicht finden können, implementieren Sie es einfach selbst. . .

Der Unterschied zwischen Unicode und Utf-8-Codierung

Unicode ist ein Zeichensatz, und UTF-8 ist einer von Unicode mit fester Länge , während UTF-8 variabel ist, belegt Unicode 1 Byte weniger als UTF-8. Unicode besteht aus Doppelbytes, während chinesische Zeichen in UTF-8 drei Bytes belegen.

UTF-8-kodierte Zeichen können theoretisch bis zu 6 Byte lang sein, aber 16-Bit-BMP-Zeichen (Basic Multilingual Plane) können nur bis zu 3 Byte lang sein. Werfen wir einen Blick auf die UTF-8-Kodierungstabelle: Die Position von

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

xxx wird durch die binäre Darstellung der Zeichenkodierungsnummer ausgefüllt. Das weiter rechts stehende x hat eine weniger spezielle Bedeutung und nur das Die kürzeste Zahl reicht aus, um sie auszudrücken. Eine aus mehreren Bytes bestehende Zeichenkette, die Zahlen kodiert. Beachten Sie, dass in einer Multibyte-Zeichenfolge die Anzahl der „1“ am Anfang des ersten Bytes der Anzahl der Bytes in der gesamten Zeichenfolge entspricht. Die erste Zeile beginnt mit 0, um mit der ASCII-Codierung kompatibel zu sein. Dies entspricht einem Byte, die zweite Zeile ist eine Doppelbyte-Zeichenfolge und die dritte Zeile besteht aus 3 Bytes, z. B. chinesischen Zeichen usw. (Persönlich denke ich: Tatsächlich können wir die Anzahl der Einsen vor uns einfach als Anzahl der Bytes betrachten)

So konvertieren Sie Unicode in Utf-8

In Um Unicode in UTF-8 zu konvertieren, müssen Sie natürlich wissen, was der Unterschied ist. Schauen wir uns an, wie die Codierung in Unicode in UTF-8 konvertiert wird. Wenn das Byte eines Zeichens kleiner als 0x80 (128) ist, handelt es sich um ein ASCII-Zeichen, das ein Byte einnimmt, und es erfolgt keine Konvertierung erforderlich, da UTF-8 mit der ASCII-Kodierung kompatibel ist. Wenn die Codierung des chinesischen Zeichens „you“ in Unicode „u4F60“ ist, konvertieren Sie es in die Binärform 100111101100000 und konvertieren Sie es dann gemäß der UTF-8-Methode. Binärziffern können aus der Unicode-Binärdatei von niedrig nach hoch entnommen werden, wobei jeweils 6 Bits eingenommen werden. Die obige Binärziffer kann beispielsweise in das unten gezeigte Format übernommen werden mehr als 8 Bits werden mit 0 aufgefüllt.

unicode: 100111101100000                   4F60
utf-8:    11100100,10111101,10100000       E4BDA0

Von oben können Sie die Konvertierung zwischen Unicode und UTF-8 intuitiv erkennen. Nachdem Sie das Format von UTF-8 kennen, können Sie natürlich die umgekehrte Operation ausführen, d. h. es in binär konvertieren Nehmen Sie es entsprechend dem Format aus der entsprechenden Position heraus und konvertieren Sie es dann in das resultierende Unicode-Zeichen (dieser Vorgang kann durch „Verschiebung“ abgeschlossen werden). Beispielsweise kann bei der obigen Konvertierung von „Sie“ der Wert als Drei-Byte-Speicher beurteilt werden, da sein Wert größer als 0x800 und kleiner als 0x10000 ist. Dann muss das höchste Bit um „12“ Bits nach rechts verschoben werden und dann ist das höchste Bit gemäß dem Drei-Byte-Format 11100000 (0xE0) oder (|), um den höchsten Wert zu erhalten. Auf die gleiche Weise wird die zweite Ziffer um „6“ Bits nach rechts verschoben und der Binärwert der höchsten Ziffer und der zweiten Ziffer nach links verschoben. Dies kann durch Ausführen der Positionsoperation (&) mit 111111 (0x3F) berechnet werden ) und dann mit 11000000 (0x80 oder (|)) summiert. Das dritte Bit muss nicht verschoben werden. Nehmen Sie einfach die letzten sechs Bits direkt (& mit 111111 (ox3F)) und verknüpfen Sie sie dann mit ODER (|) mit 11000000 (0x80).

So kehren Sie UTF-8 wieder in Unicode um

Natürlich erfolgt die Konvertierung von UTF-8 nach Unicode auch durch Verschiebung usw., d.h. Beim Konvertieren von UTF-8 wird die Binärzahl an der entsprechenden Position des Formats extrahiert. Im obigen Beispiel besteht „you“ aus drei Bytes, daher muss jedes Byte verarbeitet werden, vom High-Bit bis zum Low-Bit.

In UTF-8 ist „Sie“ 11100100,10111101,10100000. Ausgehend vom High-Bit, also dem ersten Byte 11100100, ist es ganz einfach, das UND (&) mit 11111 (0x1F) zu verbinden Die höchste Position muss vor dem 12. Bit liegen, da jedes Mal sechs Ziffern verwendet werden.

Das Ergebnis muss also um 12 Bit nach links verschoben werden, und das höchste Bit ist jetzt 0100.000000.000000. Das zweite Bit besteht darin, „111101“ herauszunehmen, Sie müssen also nur das zweite Byte 10111101 und 111111 (0x3F) UND (&) verknüpfen. Nachdem das Ergebnis um 6 Bit nach links verschoben und das Ergebnis des höchsten Bytes oder (|) genommen wurde, ist das zweite Bit vervollständigt und das Ergebnis ist 0100,111101,000000.

Analog dazu wird die letzte Ziffer direkt mit 111111 (0x3F) UND-verknüpft (&) und dann mit dem vorherigen Ergebnis ODER-verknüpft (|), um das Ergebnis 0100,111101,100000 zu erhalten.

PHP-Code-Implementierung

/**
 * 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;
}

Getestet

$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);

Die oben genannten Konvertierungen sind Tests für chinesische Zeichen [die im Allgemeinen nicht ASCII sind], denn wenn sie ASCII sind, ist es das Wiederholen Sie das Gleiche, sodass Sie sich nicht so viel Mühe geben müssen.

Außerdem sind diese beiden Funktionen einfach implementiert und unterstützen nur die Konvertierung einzelner Zeichen [ein vollständiges UTF8-Zeichen oder ein vollständiges Unicode-Zeichen]. Wenn Sie es verstehen, können Sie es genießen. . .

Empfohlen: „PHP-Tutorial

Das obige ist der detaillierte Inhalt vonSo konvertieren Sie PHP utf8 in Unicode. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn