ホームページ トピック phpmysql php mysqlの中国語の文字化けコードを解決するにはどうすればよいですか?

php mysqlの中国語の文字化けコードを解決するにはどうすればよいですか?

Nov 03, 2020 pm 01:53 PM
mysql php

php MySQL 中国語文字化けの解決策: まず、メタ タグを使用して「ページ宣言エンコーディング」を GB2312 および UTF-8 に設定し、次に mysql_query() を使用して「データベース接続エンコーディング」を設定し、「ページ」宣言エンコーディング」は、「データベース接続エンコーディング」と一致させることができます。

php mysqlの中国語の文字化けコードを解決するにはどうすればよいですか?

# 推奨チュートリアル:

mysql ビデオ チュートリアル PHP ビデオ チュートリアル

一般に、文字化けが発生する原因は 2 つあります。1 つは、エンコード (文字セット) の設定に誤りがあり、ブラウザが間違ったエンコードで解析し、画面が乱雑になることです。次に、ファイルを開いた後、間違ったエンコードで保存します。たとえば、テキスト ファイルは元々 GB2312 でエンコードされていましたが、UTF-8 エンコードで開かれて保存されました。上記の文字化けコードの問題を解決するには、まず開発のどの側面にエンコーディングが関係しているかを知る必要があります:

1. ファイル エンコーディング: ページ ファイル (.html、.php など) のエンコーディングを指します。それ自体は保存されます。 Notepad と Dreamweaver では、ページを開くときにファイルのエンコーディングが自動的に認識されるため、問題は少なくなります。ただし、ZendStudio はエンコードを自動的に認識しません。環境設定の設定に従って特定のエンコードでファイルを開くだけです。作業中に誤って間違ったエンコードでファイルを開くと、保存した瞬間に文字化けが表示されます。変更を加えた後です。

2. ページ宣言のエンコーディング: HTML コード HEAD では、 (このWeb ページで使用されているエンコーディングをブラウザーに伝えるために、XXX の前に記述する必要があります。そうしないとページが空白になります (IE PHP のみ))。現在、主に GB2312 と UTF が使用されています。中国の Web サイト開発 -8 2 つのエンコーディング.

3. データベース接続エンコーディング: データベース操作を実行するときにデータベースにデータを送信するためにどのエンコーディングが使用されるかを指します。データベース自体のエンコーディング (MySQL 内部など) デフォルトは latin1 エンコーディングであり、Mysql はデータを latin1 エンコーディングで保存し、他のエンコーディングで Mysql に送信されたデータは latin1 エンコーディングに変換されることを意味します。 WEB開発ではエンコードが関係しますが、文字化けの原因は上記3つのエンコード設定が一致していないことがわかりますが、各種エンコードのほとんどはASCIIと互換性があるため、英語の記号は表示されず、中国語の文字は不運になります。一般的なエラー状況と解決策は次のとおりです:

1. データベースは UTF8 エンコーディングを使用し、ページ宣言エンコーディングは GB2312 です。これが文字化けの最も一般的な原因です。このとき、直接 SELECT データはPHP スクリプトは文字化けします。クエリを実行する前に使用する必要があります:

mysql_query("SET NAMES GBK");
//或
mysql_query("SET NAMES GB2312");
ログイン後にコピー
MYSQL 接続エンコーディングを設定するには、ページ宣言エンコーディングがここで設定した接続エンコーディングと一致していることを確認してください (GBK は GB2312 の拡張版です) ). ページが UTF-8 エンコードされている場合は、次を使用できます:

mysql_query("SET NAMES UTF8");
ログイン後にコピー
一般的に使用される UTF-8 ではなく UTF8 であることに注意してください。ページで宣言されたエンコーディングがページの内部エンコーディングと一致する場合は、

注: 実際、MYSQL のデータ入出力は上記よりも高速です。より複雑です。MYSQL には 2 つのデフォルトのエンコーディングが定義されています。設定ファイル my.ini ([client] の default-character-set と [mysqld] の default-character-set で、それぞれデフォルトのクライアントを設定します。接続とデータベース内で使用されるエンコーディング。上で指定したエンコーディングは実際には次のとおりです) MYSQL クライアントがサーバーに接続するときのコマンド ライン パラメーターcharacter_set_client。デフォルトのエンコーディングを使用する代わりに、受信したクライアント データのエンコーディングを MYSQL サーバーに伝えます。

2. ページ宣言のエンコーディングは、ファイル自体のエンコーディングです。エンコーディングが一貫していない場合、ページ作成時にアーティストがブラウザに表示するのは文字化けしたコードであるため、これはめったに起こりません。多くの場合、公開後に小さな修正が加えられます。バグ、ページを開くことによって引き起こされます。間違ったエンコードを使用して保存してください。または、CuteFTP などの FTP ソフトウェアを使用してオンラインでファイルを直接変更すると、ソフトウェアのエンコード設定が正しくないため、間違ったエンコードが変換されます。

3. バーチャルホストをレンタルしている友人の中には、上記の 3 つのエンコードが正しく設定されているにもかかわらず、依然としてコードが文字化けしている人がいます。たとえば、Web ページが GB2312 でエンコードされている場合、IE などのブラウザで開いたときに常に UTF-8 として認識されます。Web ページの HEAD にはすでに GB2312 と記載されています。ブラウザのエンコードを手動で GB2312 に変更した後、 、ページは正常に表示されます。その理由は、サーバー Apache がサーバーのグローバルなデフォルト エンコーディングを設定し、httpd.conf に AddDefaultCharset UTF-8 を追加するためです。このとき、サーバーはまずHTTPヘッダーをブラウザーに送信しますが、その優先度はページ内で宣言されているエンコーディングよりも高いため、当然ブラウザーは誤認識してしまいます。解決策は 2 つあり、管理者は独自の仮想マシンの構成ファイルに AddDefaultCharset GB2312 を追加してグローバル構成をオーバーライドするか、独自のディレクトリの .htaccess で構成する必要があります。

コード化けの解決策

コード化けの問題を解決するには、まずデータベースで使用されているエンコーディングを把握する必要があります。指定しない場合、デフォルトは latin1 です。
最もよく使用する 3 つの文字セットは、gb2312、gbk、および utf8 です。

那么我们如何去指定数据库的字符集呢?下面也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 '你的编码';

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

以上がphp mysqlの中国語の文字化けコードを解決するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

PHPの未来:適応と革新 PHPの未来:適応と革新 Apr 11, 2025 am 12:01 AM

PHPの将来は、新しいテクノロジーの傾向に適応し、革新的な機能を導入することで達成されます。1)クラウドコンピューティング、コンテナ化、マイクロサービスアーキテクチャに適応し、DockerとKubernetesをサポートします。 2)パフォーマンスとデータ処理の効率を改善するために、JITコンパイラと列挙タイプを導入します。 3)パフォーマンスを継続的に最適化し、ベストプラクティスを促進します。

PHP対Python:違いを理解します PHP対Python:違いを理解します Apr 11, 2025 am 12:15 AM

PHP and Python each have their own advantages, and the choice should be based on project requirements. 1.PHPは、シンプルな構文と高い実行効率を備えたWeb開発に適しています。 2。Pythonは、簡潔な構文とリッチライブラリを備えたデータサイエンスと機械学習に適しています。

MySQL:簡単な学習のためのシンプルな概念 MySQL:簡単な学習のためのシンプルな概念 Apr 10, 2025 am 09:29 AM

MySQLは、オープンソースのリレーショナルデータベース管理システムです。 1)データベースとテーブルの作成:createdatabaseおよびcreateTableコマンドを使用します。 2)基本操作:挿入、更新、削除、選択。 3)高度な操作:参加、サブクエリ、トランザクション処理。 4)デバッグスキル:構文、データ型、およびアクセス許可を確認します。 5)最適化の提案:インデックスを使用し、選択*を避け、トランザクションを使用します。

phpmyadminを開く方法 phpmyadminを開く方法 Apr 10, 2025 pm 10:51 PM

次の手順でphpmyadminを開くことができます。1。ウェブサイトコントロールパネルにログインします。 2。phpmyadminアイコンを見つけてクリックします。 3。MySQL資格情報を入力します。 4.「ログイン」をクリックします。

MySQLおよびSQL:開発者にとって不可欠なスキル MySQLおよびSQL:開発者にとって不可欠なスキル Apr 10, 2025 am 09:30 AM

MySQLとSQLは、開発者にとって不可欠なスキルです。 1.MYSQLはオープンソースのリレーショナルデータベース管理システムであり、SQLはデータベースの管理と操作に使用される標準言語です。 2.MYSQLは、効率的なデータストレージと検索機能を介して複数のストレージエンジンをサポートし、SQLは簡単なステートメントを通じて複雑なデータ操作を完了します。 3.使用の例には、条件によるフィルタリングやソートなどの基本的なクエリと高度なクエリが含まれます。 4.一般的なエラーには、SQLステートメントをチェックして説明コマンドを使用することで最適化できる構文エラーとパフォーマンスの問題が含まれます。 5.パフォーマンス最適化手法には、インデックスの使用、フルテーブルスキャンの回避、参加操作の最適化、コードの読み取り可能性の向上が含まれます。

PHP:それは死にかけていますか、それとも単に適応していますか? PHP:それは死にかけていますか、それとも単に適応していますか? Apr 11, 2025 am 12:13 AM

PHPは死にかけていませんが、常に適応して進化しています。 1)PHPは、1994年以来、新しいテクノロジーの傾向に適応するために複数のバージョンの反復を受けています。 2)現在、電子商取引、コンテンツ管理システム、その他の分野で広く使用されています。 3)PHP8は、パフォーマンスと近代化を改善するために、JITコンパイラおよびその他の機能を導入します。 4)Opcacheを使用してPSR-12標準に従って、パフォーマンスとコードの品質を最適化します。

単一のスレッドレディスの使用方法 単一のスレッドレディスの使用方法 Apr 10, 2025 pm 07:12 PM

Redisは、単一のスレッドアーキテクチャを使用して、高性能、シンプルさ、一貫性を提供します。 I/Oマルチプレックス、イベントループ、ノンブロッキングI/O、共有メモリを使用して同時性を向上させますが、並行性の制限、単一の障害、および書き込み集約型のワークロードには適していません。

phpmyAdmin接続mysql phpmyAdmin接続mysql Apr 10, 2025 pm 10:57 PM

phpmyadminを使用してmysqlに接続する方法は? phpmyadminにアクセスするためのURLは、通常、http:// localhost/phpmyadminまたはhttp:// [サーバーIPアドレス]/phpMyAdminです。 MySQLユーザー名とパスワードを入力します。接続するデータベースを選択します。 [接続]ボタンをクリックして、接続を確立します。

See all articles