Heim >Themen >php mysql >Wie löse ich den chinesischen verstümmelten Code in PHP MySQL?

Wie löse ich den chinesischen verstümmelten Code in PHP MySQL?

青灯夜游
青灯夜游Original
2020-11-03 13:53:284811Durchsuche

Lösung für verstümmelten PHP-MySQL-Code: Verwenden Sie zuerst das Meta-Tag, um die „Seitendeklarationskodierung“ auf GB2312 und UTF-8 festzulegen. Verwenden Sie dann mysql_query(), um die „Datenbankverbindungskodierung“ festzulegen, und stellen Sie sicher, dass die „Seitendeklaration“ festgelegt ist „Kodierung“ und „Datenbankverbindungskodierung“ sind identisch.

Wie löse ich den chinesischen verstümmelten Code in PHP MySQL?

Empfohlene Tutorials: MySQL-Video-Tutorial, PHP-Video-Tutorial

Im Allgemeinen gibt es zwei Gründe für das Auftreten verstümmelter Zeichen. Der erste ist auf den Fehler bei der Codierung (Zeichensatz) zurückzuführen , was dazu führt, dass der Browser zum Parsen die falsche Codierung verwendet, was zu einem Bildschirm voller unordentlicher „himmlischer Bücher“ führt. Zweitens wird die Datei mit der falschen Codierung geöffnet und dann beispielsweise eine Textdatei in GB2312 gespeichert , wurde jedoch in der UTF-8-Kodierung geöffnet und gespeichert. Um das obige Problem mit verstümmeltem Code zu lösen, müssen Sie zunächst wissen, welche Aspekte der Entwicklung eine Codierung beinhalten:

1. Dateicodierung: bezieht sich auf die Codierung, in der die Seitendatei (.html, .php usw.) selbst gespeichert wird. Notepad und Dreamweaver erkennen beim Öffnen der Seite automatisch die Dateikodierung, sodass es weniger Probleme gibt. Allerdings erkennt ZendStudio die Kodierung nicht automatisch. Es öffnet die Datei nur in einer bestimmten Kodierung entsprechend der Konfiguration der Einstellungen. Wenn Sie die Datei während der Arbeit versehentlich mit der falschen Kodierung öffnen, werden beim Speichern verstümmelte Zeichen angezeigt es nach der Änderung.

2. Kodierung der Seitendeklaration: Im HTML-Code HEAD können Sie e8b088d6bcb59096041b1c501b34c57e verwenden. (Dieser Satz muss geschrieben werden in b2386ffb911b14667cb8f0f91ea547a7XXX6e916e0f7d1e588d4f442bf645aedb2f, andernfalls ist die Seite leer (nur IE+PHP), um dem Browser mitzuteilen, welche Codierung die Webseite verwendet. Derzeit werden GB2312 und UTF-8 hauptsächlich in der chinesischen Website-Entwicklung verwendet

3. Datenbankverbindungskodierung: Bezieht sich darauf, welche Kodierung zum Übertragen von Daten an die Datenbank verwendet wird. Dabei ist zu beachten, dass sie nicht mit der Kodierung der Datenbank selbst verwechselt werden sollte MySQL ist eine Latin1-Codierung. Es heißt, dass MySQL Daten in Latin1-Codierung speichert und Daten, die in anderen Codierungen an MySQL übertragen werden, in Latin1-Codierung konvertiert werden. Wenn Sie wissen, wo die Codierung bei der WEB-Entwicklung eine Rolle spielt, kennen Sie auch die Gründe Für den verstümmelten Code: Die oben genannten drei Elemente sind inkonsistent. Da die meisten verschiedenen Codierungen nicht mit ASCII kompatibel sind, werden keine englischen Symbole angezeigt. Im Folgenden sind einige häufige Fehlersituationen und Lösungen aufgeführt.

1. Die Datenbank verwendet UTF8-Codierung und die Seitendeklaration ist GB2312, was die häufigste Ursache für verstümmelte Zeichen ist. Zu diesem Zeitpunkt werden die direkten SELECT-Daten im PHP-Skript verstümmelt.

mysql_query("SET NAMES GBK");
//或
mysql_query("SET NAMES GB2312");
, um die MYSQL-Verbindungskodierung vor der Abfrage festzulegen, um sicherzustellen, dass die Seitendeklarationskodierung mit der hier eingestellten Verbindungskodierung übereinstimmt (GBK ist eine Erweiterung von GB2312). Wenn die Seite UTF-8-kodiert ist, können Sie Folgendes verwenden:

mysql_query("SET NAMES UTF8");
Beachten Sie, dass es sich um UTF8 anstelle des häufig verwendeten UTF-8 handelt, wenn die von der Seite deklarierte Kodierung mit der in der Datenbank übereinstimmt. Wenn die Kodierung konsistent ist, müssen Sie die Verbindungskodierung nicht festlegen

Hinweis: Tatsächlich ist die Dateneingabe und -ausgabe von MYSQL komplizierter als oben erwähnt. In der MYSQL-Konfigurationsdatei my.ini sind zwei Standardcodierungen definiert, die in [client-character-set] und default- angegeben sind. Zeichensatz in [mysqld] legt jeweils die von der Clientverbindung und der Datenbank intern verwendete Codierung fest. Die oben angegebene Codierung ist tatsächlich der Befehlszeilenparameter „character_set_client“, um dem MYSQL-Server mitzuteilen, welche Codierung Die empfangenen Client-Daten stimmen nicht mit der Codierung der Datei selbst überein, da der Künstler die Seite erstellt Sie sehen im Browser verstümmelte Zeichen. Meistens wird dies durch die Behebung kleinerer Fehler nach der Veröffentlichung, das Öffnen der Seite in der falschen Codierung und das anschließende Speichern verursacht. Oder Sie verwenden eine FTP-Software, um Dateien direkt online zu ändern, z. B. CuteFTP. Aufgrund einer falschen Software-Kodierungskonfiguration wird die falsche Kodierung konvertiert.

3. Einige Freunde, die virtuelle Hosts gemietet haben, stellten fest, dass die oben genannten drei Kodierungen immer noch verstümmelt waren. Wenn die Webseite beispielsweise in GB2312 kodiert ist, wird sie beim Öffnen von Browsern wie dem IE immer als UTF-8 erkannt. Der HEAD der Webseite hat bereits angegeben, dass es sich um GB2312 handelt, nachdem die Browserkodierung manuell auf GB2312 geändert wurde , die Seite wird normal angezeigt. Der Grund dafür ist, dass der Server-Apache die globale Standardkodierung des Servers festlegt und AddDefaultCharset UTF-8 in httpd.conf hinzufügt. Zu diesem Zeitpunkt sendet der Server zuerst den HTTP-Header und seine Priorität ist höher als die auf der Seite deklarierte Codierung. Natürlich erkennt der Browser ihn falsch. Es gibt zwei Lösungen. Administratoren sollten AddDefaultCharset GB2312 zur Konfigurationsdatei ihrer eigenen virtuellen Maschine hinzufügen, um die globale Konfiguration zu überschreiben, oder sie in .htaccess in ihrem eigenen Verzeichnis konfigurieren.

Lösung für verstümmelte Codes

Um das Problem des verstümmelten Codes zu lösen, müssen Sie zunächst herausfinden, welche Codierung Ihre Datenbank verwendet. Wenn nicht angegeben, ist der Standardwert latin1.

Die drei Zeichensätze, die wir am häufigsten verwenden, sollten gb2312, gbk und utf8 sein.

那么我们如何去指定数据库的字符集呢?下面也gbk为例

【在MySQL Command Line Client创建数据库】

mysql> CREATE TABLE `mysqlcode` (
    -> `id` TINYINT( 255 ) UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    -> `content` VARCHAR( 255 ) NOT NULL
    -> ) TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;
Query OK, 0 rows affected, 1 warning (0.03 sec)
mysql> desc mysqlcode;
+---------+-----------------------+------+-----+---------+----------------+
| Field   | Type                  | Null | Key | Default | Extra          |
+---------+-----------------------+------+-----+---------+----------------+
| id      | tinyint(255) unsigned | NO   | PRI |         | auto_increment |
| content | varchar(255)          | NO   |     |         |                |
+---------+-----------------------+------+-----+---------+----------------+
2 rows in set (0.02 sec)

其中后面的TYPE = MYISAM CHARACTER SET gbk COLLATE gbk_chinese_ci;

就是指定数据库的字符集,COLLATE (校勘),让mysql同时支持多种编码的数据库。

当然我们也可以通过如下指令修改数据库的字符集

alter database da_name default character set 'charset'.

客户端以 gbk格式发送 ,可以采用下述配置:

SET character_set_client='gbk'
SET character_set_connection='gbk'
SET character_set_results='gbk'

这个配置就等价于 SET NAMES 'gbk'。

现在对刚才创建的数据库操作

mysql> use test;
Database changed
mysql> insert into mysqlcode values(null,'php爱好者');
ERROR 1406 (22001): Data too long for column 'content' at row 1

没有指定字符集为gbk,插入时出错

mysql> set names 'gbk';
Query OK, 0 rows affected (0.02 sec)

指定字符集为 gbk

mysql> insert into mysqlcode values(null,'php爱好者');
Query OK, 1 row affected (0.00 sec)

插入成功

mysql> select * from mysqlcode;
+----+-----------+
| id | content   |
+----+-----------+
| 1  | php爱好着 |
+----+-----------+
1 row in set (0.00 sec)

在没有指定字符集gbk时读取也会出现乱码,如下

mysql> select * from mysqlcode;
+----+---------+
| id | content |
+----+---------+
| 1  | php???  |
+----+---------+
1 row in set (0.00 sec)

【在phpmyadmin创建数据库,并指定字符集】

表类型根据自己需要选,这里选MyISAM(支持全文检索);
整理选择 gbk_chinese_ci 也就是gbk字符集
gbk_bin 简体中文, 二进制。gbk_chinese_ci 简体中文, 不区分大小写。

在刚才创建的数据库插入数据库

再浏览时发现是乱码

为什么呢?是因为数据库为gbk字符集,而我们操作时没有指定为gbk

回到数据库首页

可以看到 mysql 连接校对默认的latin1_bin。我们将其改为gbk_chinese_ci

再插入一条数据。看,这条已经正常了

【解决php读取数据库乱码】

仍以数据库mysqlcode为例 

<?php 
$conn = mysql_connect("localhost","root","89973645"); 
mysql_query("set names &#39;gbk&#39;");//这就是指定数据库字符集,一般放在连接数据库后面就系了 
mysql_select_db("test"); 
 
$sql = "select * from mysqlcode"; 
$result = mysql_query($sql,$conn); 
 
?> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" /> 
<title>mysql 字符编码</title> 
</head> 
 
<body> 
<table width="300" height="32" border="1" align="center" cellpadding="0" cellspacing="0"> 
 <tr> 
    <td width="71" align="center">id</td> 
    <td width="229" align="center">内容</td> 
 </tr> 
 <?php while($row = mysql_fetch_assoc($result)){ 
 echo "   
 <tr> 
    <td align=/"center/">".$row[&#39;id&#39;]."</td> 
    <td>".$row[&#39;content&#39;]."</td> 
 </tr>"; 
}?>   
</table> 
</body> 
</html> 
<?php mysql_free_result($result);?>

 如果我们将mysql_query("set names 'gbk'");注释掉,肯定时乱码

加上那句又正常了

一句

你数据库用什么编码,在对数据库操作之前就set names '你的编码';

更多编程相关知识,请访问:编程学习网站!!

Das obige ist der detaillierte Inhalt vonWie löse ich den chinesischen verstümmelten Code in PHP MySQL?. 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