>백엔드 개발 >PHP 문제 >PHP에서 한자가 깨지는 문제를 해결하는 방법

PHP에서 한자가 깨지는 문제를 해결하는 방법

藏色散人
藏色散人원래의
2020-07-11 09:11:043270검색

PHP에서 잘못된 중국어 문자에 대한 해결 방법: 1. mysql 구성 파일 "my.ini" 또는 "my.cnf"를 변경합니다. 2. 필요한 PHP 프로그램 앞에 "mysql_query("set names 'coding'' 문을 추가합니다. 데이터베이스 작업 수행 ");" 3. 서버 인코딩 세트를 "UTF-8"로 설정합니다.

PHP에서 한자가 깨지는 문제를 해결하는 방법

PHP에서 중국어 왜곡 문자의 원인과 해결 방법 분석

PHP 웹 페이지 인코딩

1.gb2312 인코딩을 사용하려면 PHP에서 헤더("Content")를 출력해야 합니다. -type: text/html;charset =gb2312");, 정적 페이지 추가, 모든 파일의 인코딩 형식은 ANSI입니다. 메모장으로 열고 다른 이름으로 저장한 다음 인코딩을 ANSI로 선택하고 소스 파일을 덮어쓸 수 있습니다.

2. utf-8 인코딩을 사용하려면 PHP는 헤더("Content-type: text/html; charset=utf-8");를 출력하고 정적 페이지와 인코딩 형식을 추가해야 합니다. 모든 파일 중 utf-8입니다. utf-8로 저장하는 것은 약간 번거로울 수 있습니다. 일반적으로 utf-8 파일은 처음에 BOM을 가지고 있습니다. 세션을 사용하면 문제가 발생합니다. editplus에서 도구-> 매개변수 선택->파일->UTF-8 서명에서 항상 삭제를 선택한 다음 저장하여 BOM 정보를 제거합니다.

3.php 자체는 유니코드가 아니므로 substr과 같은 모든 기능을 mb_substr로 변경하거나(mbstring 확장 프로그램을 설치해야 함) iconv를 사용하여 코드를 변환해야 합니다.

PHP와 Mysql 간의 데이터 상호 작용

PHP와 데이터베이스의 인코딩은 일관되어야 합니다

1. mysql 구성 파일 my.ini 또는 my.cnf를 수정하세요. mysql은 utf-8

[mysql]  
default-character-set=utf8 
[mysqld]  
default-character-set=utf8 
default-storage-engine=MyISAM 
在[mysqld]下加入:  
default-collation=utf8_bin 
init_connect='SET NAMES utf8'

2로 인코딩하는 것이 가장 좋습니다. PHP 프로그램을 실행하기 전에 데이터베이스를 추가해야 합니다. PHP 인코딩이 gb2312이면 mysql 인코딩은 gb2312입니다. utf-8이면 mysql 인코딩은 utf8입니다. 이런 식으로 삽입하거나 검색하면 데이터가 생성될 때 PHP 중국어 문자가 깨지지 않습니다.

인코딩 정보

1. 문자 세트:

컴퓨터의 최하위 계층에 저장된 데이터는 모두 바이너리 데이터입니다. 진정으로 의미 있는 문자를 얻으려면 이진 데이터가 각 문자에 대응되도록 해야 합니다. 관계 코딩 테이블이 형성된다.

일반적으로 사용되는 문자 집합:

ISO-8859-1 라틴 코드 표 latin. 서유럽 언어를 나타내며 1바이트 또는 8비트를 사용하여 데이터를 나타냅니다.

GB2312 중국어 간체 코드 표. 6000-7000개의 한자와 기호가 포함되어 있습니다. 2바이트로 표현됩니다. 두 바이트 모두 1로 시작하고 둘 다 음수입니다.

GBK는 현재 가장 일반적으로 사용되는 중국어 코드표로, 20,000개의 한자와 기호로 구성됩니다. 데이터를 나타내려면 2바이트를 사용합니다.

유니코드 국제 표준 코드는 어떤 텍스트이든 2바이트로 저장됩니다.

UTF-8은 유니코드를 기반으로 하며, 2바이트 대신 1바이트에 데이터를 저장할 수 있으며, 이 코드 테이블은 각 바이트 헤더에 인코딩 정보를 추가하여 더욱 표준화되었습니다.

(Linux는 기본적으로 ISO-8859-1을 사용하고, win32는 기본적으로 GB2312를 사용합니다.)

2. 인코딩 및 디코딩

Encoding: 문자를 문자 집합의 해당 인코딩으로 변환

Decoding: 문자에서 인코딩 찾기 set 해당 문자

네트워크에서 중국어 전송 프로세스

1. Java를 예로 들면 eclipse는 기본적으로 UTF-8 인코딩 세트를 사용하고 Tomcat 서버는 기본적으로 ISO-8859-1 인코딩 세트를 사용합니다. 브라우저는 일반적으로 기본적으로 GBK 인코딩 세트를 사용합니다.

문자는 프로그램과 서버 간에 전송되고, 바이트는 서버와 브라우저 간에 전송됩니다.

2. 중국어 전송 과정:

브라우저의 중국어 문자 -----> 서버 -----> 프로그램 내 한자------>서버------>디코드------>브라우저------>디스플레이용 인코딩

3. 깨알 같은 문자가 생성되는 이유는 다음과 같습니다.

(1) 브라우저의 한자는 GBK로 인코딩되어 바이트 스트림으로 서버에 전송됩니다. 그런 다음 서버는 이를 ISO-8859-1로 디코딩하여 다음과 같은 형식으로 프로그램에 전송합니다. 문자.

ISO-8859-1 인코딩 세트는 중국어 문자를 지원하지 않기 때문에 디코딩된 모든 문자는 서유럽 문자입니다. 이러한 문자를 프로그램에 전송하면 잘못된 문자가 생성됩니다.

이러한 이유로 서버의 인코딩 세트를 UTF로 설정하면 됩니다. -8이면 충분합니다.

request.setCharacterEncoding("UTF-8");

그러나 이 방법은 POST 요청 방법에만 사용할 수 있습니다. 왜냐하면 설정은 요청 본문의 내용에만 영향을 미치기 때문입니다. GET 요청 방법인 경우 먼저 디코딩한 다음 인코딩할 수 있습니다.

byte[] buffer = request.getParameter("word").getBytes("ISO-8859-1");  //进行编码
String newStr = new String(buffer,"UTF-8");  //进行解码

(2) 프로그램에 포함된 한자는 그대로 서버로 전송됩니다. 단, ISO-8859-1 인코딩 세트는 지원하지 않기 때문에 서버가 먼저 한자를 인코딩한 후 브라우저로 전송해야 합니다. 한자, 해당 문자를 문자 집합에서 찾을 수 없습니다. 인코딩 후에는 물음표가 되어 브라우저에 전송되어 표시됩니다.

이 경우 두 가지 설정이 필요합니다.

response.setCharacterEncoding("UTF-8");//将服务器编码集设置为UTF-8
response.setContentType("text/html;charset=UTF-8"); //将浏览器编码集设置为UTF-8

실제로는 설정의 두 번째 줄에는 이미 서버에 대한 설정이 포함되어 있으므로 일반적으로 코드의 두 번째 문장을 작성하면 됩니다.

더 많은 관련 지식을 알고 싶으시다면

PHP 중국어 홈페이지

를 방문해주세요!

위 내용은 PHP에서 한자가 깨지는 문제를 해결하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.