Heim  >  Artikel  >  Backend-Entwicklung  >  utf-8 – Zeichenkodierung in PHP

utf-8 – Zeichenkodierung in PHP

WBOY
WBOYOriginal
2016-12-01 00:56:231198Durchsuche

<code>$str1 = "\xe4\xb8\xad";

$str2 = '\xe4\xb8\xad';

$str3 = '中';</code>

Können Sie den Unterschied zwischen den dreien im Detail erklären und ob sie ineinander überführt werden können?

Antwortinhalt:

<code>$str1 = "\xe4\xb8\xad";

$str2 = '\xe4\xb8\xad';

$str3 = '中';</code>

Können Sie den Unterschied zwischen den dreien im Detail erklären und ob sie ineinander überführt werden können?

Zum ersten Mal eine Frage zu segmentfault beantworten. .

PHP-String-Variablen, doppelte Anführungszeichen und einfache Anführungszeichen haben unterschiedliche Bedeutungen

Escape bei Verwendung von doppelten Anführungszeichen.
Bei der Verwendung von doppelten Anführungszeichen wird der Text „$xxxx“ durch den Wert der entsprechenden Variablen ersetzt.

Zum Beispiel.

<code class="php">$abc='123';
echo "$abc"; //这样会输出123
echo '$abc'; //这样会输出$abc
echo "\n"; //这样会输出一个换行符
echo '\n'; //这样会输出\n两个字符(一个斜杠一个n)</code>

Zurück zur Frage:
Die hexadezimale Codierung des chinesischen Zeichens „中“ in UTF-8 ist 0xe4, 0xb8, 0xad
Daher wird es in einer Zeichenfolge in doppelten Anführungszeichen als „中“ maskiert " x Der Anfang zeigt an, dass es sich um ein hexadezimal ausgedrücktes Zeichen handelt, genau wie &xe4; in HTML
. In einer einfachen Anführungszeichenfolge wird xe4xb8xad

direkt ausgegeben.

Wenn Ihre Umgebungskodierung UTF-8 ist, sind str1 und str3 gleichwertig. Wenn Sie direkt echoen, wird „mittel“ ausgegeben. Wenn es sich um einen Drei-Byte-Vergleich auf Binärebene handelt, ist er ebenfalls völlig gleich. Zeichenfolgen in PHP werden direkt in der lokal codierten Binärdatei

gespeichert

Wenn Ihre Umgebungskodierung nicht UTF-8 ist (z. B. GBK), ist str1 im Grunde ein verstümmelter Code und str1 und str3 sind nicht mehr gleichwertig

Str2 gibt jederzeit „xe4xb8xad“ aus (ohne Anführungszeichen). In einer Zeichenfolge mit einfachen Anführungszeichen müssen nur die einfachen Anführungszeichen selbst durch „escaped“ ersetzt werden, andernfalls werden sie als gewöhnliche Zeichen behandelt

Erklären Sie nur den Unterschied zwischen dem ersten und dem zweiten, also den Unterschied zwischen einfachen und doppelten Anführungszeichen

Doppelte Anführungszeichen: Die darin enthaltenen Anführungszeichen werden mit Escapezeichen versehen.
Einfache Anführungszeichen: Die darin enthaltenen Anführungszeichen werden nicht mit Escapezeichen versehen.

<code class="php">$a = 123;

echo "output:$a";//output:123
echo 'output:$a';//output:$a

//下面的示例仅限linux的php-cli
echo "new line\nsecond line";
/*
会换行,输出:
new line
second line
*/

echo 'no new line\n aaa';
/*
不会换行,输出:
no new line\n aaa
*/</code>

x gefolgt von hexadezimalen Ziffern sind Escape-Zeichen, und Escape-Zeichen funktionieren nur in doppelten Anführungszeichen ". In einfachen Anführungszeichen ist nur das Escapezeichen des einfachen Anführungszeichens selbst ' und des Backslashs gültig, die anderen sind ungültig.

PHP selbst unterscheidet keine Zeichenkodierungen. Mit anderen Worten: $str1 ist eine Drei-Byte-Zeichenfolge, und die drei Bytes der Zeichenfolge sind (hexadezimale Codierung) E4 B8 AD. Wenn es in UTF-8-Kodierung vorliegt, ist es das Zeichen . Dies ist bei anderen Kodierungen nicht unbedingt der Fall.

und $str2 ist eine 12-Byte-Zeichenfolge, die aus den von Ihnen eingegebenen Zeichen besteht.

und $str3 ist eine Zeichenfolge. Wenn Sie die Datei in UTF-8-Kodierung speichern, ist sie dasselbe wie $str1. Wenn Sie in GBK speichern, sind es zwei Bytes D6 D0, wenn Sie in BIG5 speichern, sind es A4 A4.


Ob UTF-8, GBK oder BIG5 oder sogar viele andere Sprachkodierungen, sie alle folgen EUC, was bedeutet, dass ihre Kodierungen für ASCII-Zeichen konsistent sind, sodass sie unabhängig davon, welche Kodierung zum Speichern verwendet wird, vorhanden sind keinen Einfluss auf die PHP-Codearbeit haben. Bei Nicht-ASCII-Zeichen gibt es jedoch einen großen Unterschied.

Damit Nicht-ASCII-Zeichen in PHP normal angezeigt werden, müssen Sie sicherstellen, dass Ihre Speicherkodierung und Ausgabekodierung konsistent sind. Wenn die Ausgabe HTML ist, wird die Codierung über das meta-Tag oder im HTTP-Header deklariert. Wenn sie inkonsistent sind, werden verstümmelte Zeichen angezeigt.

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