php mysql 중국어 왜곡 코드에 대한 해결 방법: 먼저 메타 태그를 사용하여 "페이지 선언 인코딩"을 GB2312 및 UTF-8로 설정한 다음 mysql_query()를 사용하여 "데이터베이스 연결 인코딩"을 설정하고 "페이지 선언"이 인코딩'과 '데이터베이스 연결 인코딩'은 동일합니다.
추천 튜토리얼: mysql 비디오 튜토리얼, PHP 비디오 튜토리얼
일반적으로 문자가 깨져 나타나는 이유는 두 가지입니다. 첫 번째는 인코딩(문자 집합) 설정 오류 때문입니다. , 브라우저에서 구문 분석에 잘못된 인코딩이 사용되어 화면이 지저분한 "천국의 책"으로 가득 차게 됩니다. 둘째, 파일이 잘못된 인코딩으로 열린 다음 저장되었습니다. 예를 들어, 텍스트 파일은 원래 GB2312로 인코딩되었습니다. 이지만 UTF-8 인코딩으로 열리고 저장되었습니다. 위의 잘못된 코드 문제를 해결하려면 먼저 개발의 어떤 측면에 인코딩이 포함되는지 알아야 합니다.
1. 파일 인코딩: 페이지 파일(.html, .php 등) 자체가 저장되는 인코딩을 말합니다. 메모장과 드림위버는 페이지를 열 때 파일 인코딩을 자동으로 인식하므로 문제가 줄어듭니다. 그러나 ZendStudio는 자동으로 인코딩을 인식하지 못합니다. 환경 설정에 따라 특정 인코딩으로만 파일이 열립니다. 작업 중에 실수로 잘못된 인코딩으로 파일을 열면 저장하자마자 잘못된 문자가 나타납니다. 수정 후입니다.
2. 페이지 선언 인코딩: HTML 코드 HEAD에서 e8b088d6bcb59096041b1c501b34c57e를 사용할 수 있습니다. (이 문장은 반드시 작성해야 합니다. 그렇지 않으면 웹페이지가 어떤 인코딩을 사용하는지 브라우저에 알려주기 위해 페이지가 비어 있게 됩니다(IE+PHP에만 해당). 현재 GB2312 및 UTF-8은 중국어 웹사이트 개발에 주로 사용됩니다.
3. 데이터베이스 연결 인코딩: 데이터베이스 작업을 수행할 때 데이터베이스에 데이터를 전송하는 데 사용되는 인코딩을 나타냅니다. 여기서는 데이터베이스 자체의 인코딩과 혼동해서는 안 됩니다. MySQL은 latin1 인코딩입니다. 즉, MySQL은 데이터를 latin1 인코딩으로 저장하고, 다른 인코딩으로 MySQL에 전송된 데이터는 latin1 인코딩으로 변환된다고 합니다. WEB 개발에서 인코딩이 어디에 관련되어 있는지 알면 그 이유도 알 수 있을 것입니다. 잘못된 코드의 경우: 위의 세 가지 항목은 인코딩 설정이 일치하지 않습니다. 대부분의 다양한 인코딩이 ASCII와 호환되므로 영어 기호는 표시되지 않지만, 다음은 몇 가지 일반적인 오류 상황과 해결 방법입니다. 1. 데이터베이스는 UTF8 인코딩을 사용하지만 페이지 선언은 GB2312로, 이는 문자 깨짐의 가장 일반적인 원인입니다. 이때 PHP 스크립트에서 직접 SELECT 데이터가 깨집니다.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 구성 파일 my.ini에는 -character-set 및 default-에 정의된 2가지 기본 인코딩이 있습니다. [mysqld]의 문자 집합은 클라이언트 연결과 데이터베이스 내부에서 사용되는 인코딩을 각각 설정합니다. 위에서 지정한 인코딩은 실제로 MYSQL 클라이언트가 서버에 연결할 때 MYSQL 서버에 어떤 인코딩을 알려주는 명령줄 매개변수입니다.
2. 페이지 선언 인코딩이 파일 자체의 인코딩과 일치하지 않는 경우가 발생합니다. 인코딩이 일치하지 않으면 아티스트가 페이지를 생성하기 때문입니다. 브라우저에 문자가 깨져 있는 것을 볼 수 있습니다. 대부분의 경우 게시 후 몇 가지 사소한 버그를 수정하고 잘못된 인코딩으로 페이지를 연 다음 저장했기 때문에 발생합니다. 또는 일부 FTP 소프트웨어를 사용하여 CuteFTP와 같은 온라인으로 파일을 직접 수정하는 경우 잘못된 소프트웨어 인코딩 구성으로 인해 잘못된 인코딩이 변환됩니다.
3. 가상 호스트를 임대한 일부 친구는 위의 세 가지 인코딩을 올바르게 설정했음에도 불구하고 여전히 문자가 깨져 있는 것을 발견했습니다. 예를 들어 웹 페이지가 GB2312로 인코딩된 경우 IE와 같은 브라우저에서 열 때 항상 UTF-8로 인식됩니다. 웹 페이지의 HEAD에는 브라우저 인코딩을 GB2312로 수동 변경한 후 이미 GB2312라고 명시되어 있습니다. , 페이지가 정상적으로 표시됩니다. 그 이유는 Apache 서버가 서버의 전역 기본 인코딩을 설정하고 httpd.conf에 AddDefaultCharset UTF-8을 추가하기 때문입니다. 이때 서버는 먼저 HTTP 헤더를 브라우저에 보내며, 페이지에 선언된 인코딩보다 우선순위가 높으므로 당연히 브라우저는 이를 잘못 인식하게 됩니다. 두 가지 해결 방법이 있습니다. 관리자는 자체 가상 머신의 구성 파일에 AddDefaultCharset GB2312를 추가하여 전역 구성을 재정의하거나 자체 디렉터리의 .htaccess에서 구성해야 합니다.
깨진 코드에 대한 솔루션깨진 코드 문제를 해결하려면 먼저 데이터베이스가 어떤 인코딩을 사용하는지 파악해야 합니다. 지정하지 않으면 기본값은 latin1입니다. 우리가 가장 많이 사용하는 세 가지 문자 세트는 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 'gbk'");//这就是指定数据库字符集,一般放在连接数据库后面就系了 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['id']."</td> <td>".$row['content']."</td> </tr>"; }?> </table> </body> </html> <?php mysql_free_result($result);?>
如果我们将mysql_query("set names 'gbk'");
注释掉,肯定时乱码
加上那句又正常了
一句
你数据库用什么编码,在对数据库操作之前就set names '你的编码';
更多编程相关知识,请访问:编程学习网站!!
위 내용은 PHP mysql에서 중국어 잘못된 코드를 해결하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!