>백엔드 개발 >PHP 문제 >PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

藏色散人
藏色散人원래의
2020-08-24 09:34:594173검색

PHP 가져오기 요청의 중국어 잘못된 문자에 대한 솔루션: 1. [$name = iconv("gbk","utf-8",$name);]을 사용하여 잘못된 문자를 해결합니다. 2. [mb_convert_encoding($name; , "utf" -8", "gbk");] 방법.

PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

추천: "PHP 비디오 튜토리얼"

php는 GET 메소드에 의해 전달된 잘못된 중국어 매개변수를 수신합니다

최근에 브라우저에서 중국어 매개변수를 전달하기 위한 간단한 페이지를 작성했습니다(test.php ?name=test), utf-8 페이지를 어떻게 설정해도 글자가 깨져서 표시됩니다. 구글링해서 해결방법을 많이 찾았는데 문제의 원인이 무엇인가요? 이 문제를 깊이 연구한 사람은 아무도 없습니다. 호기심에 원인이 무엇인지 확인해야 했고, 이를 통해 경험도 쌓을 수 있었습니다!

먼저 간단한 테스트 코드를 살펴보겠습니다.

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>

테스트 결과는 다음과 같습니다.

PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

응답 인코딩 콘텐츠는 utf-8이며 콘텐츠가 실제로 왜곡되어 표시됩니다. 여기서 var_dump에 의해 출력되는 변수의 길이는 4에 불과하다는 점에 유의하십시오. 당연히 utf-8 인코딩에서는 두 중국어 문자의 길이가 4바이트 이상이어야 합니다. 그러면 이에 액세스하려면 Firefox의 URL을 살펴보겠습니다. page

PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

FireFox는 자동으로 중국어 URL을 인코딩하므로 테스트가 %B2%E2%CA%D4가 되는 것을 알 수 있습니다. bytes, utf-8 인코딩이 아닌 gb2313, gbk 등의 중국어 인코딩 형식입니다. 페이지 인코딩을 gbk로 전환하면 중국어 매개변수가 정상적으로 표시됩니다. 아래 그림을 참조하세요.

PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

다음으로 또 다른 테스트를 수행합니다. 코드는 다음과 같습니다. :

<?php   
header("Content-Type:text/html;charset=UTF-8");   
$name = $_GET[&#39;name&#39;];   
var_dump($name);   
?>   
  

테스트 결과, 정상적으로 표시됨:

PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?

그렇다면 이 문제의 원인은 무엇입니까?

브라우저의 기본 인코딩이 문제를 일으키고 있다는 것입니다. 우리는 모두 중국 시스템을 사용하므로 브라우저의 기본 인코딩은 자연스럽게 현지화로 설정됩니다. 예를 들어 IE 및 FireFox의 기본 인코딩은 자체적으로 설정됩니다. 컴퓨터는 gb 시리즈입니다.

브라우저가 사용자가 입력한 URL을 요청하면 기본적으로 페이지의 인코딩 형식이 아닌 기본 인코딩 형식으로 URL에 중국어가 포함되어 전송됩니다. 따라서 페이지에 중국어가 포함된 링크는 정상이지만 우리가 수동으로 입력한 링크

코드가 왜곡된 이유. 같은 방식으로 브라우저의 기본 인코딩을 utf-8로 조정하면 입력 URL의 중국어가 utf-8로 인코딩됩니다.

위의 경우 외에도 다음과 같은 상황에서 이러한 상황이 발생합니다.

gbk 인코딩 페이지에서 생성된 주소가 utf-8 페이지에 연결되면 gbk 페이지의 중국어가 gbk 형식으로 인코딩됩니다. 다음 페이지로 전송되면 UTF-8 인코딩을 수신한 후 왜곡된 문자가 확실히 나타납니다.

IIS의 URL 재작성 모듈인 재작성된 중국어 인코딩도 gbk입니다. 페이지가 UTF-8 인코딩인 경우 재작성 매개변수가 유효하지 않습니다. 이와 같은 상황에서는 인코딩 문제를 처리하기 위해 PHP에 내장된 트랜스코딩 기능을 사용해야 합니다.

옵션 1:

$name = iconv("gbk","utf-8",$name);

옵션 2:

mb_convert_encoding($name, "utf-8", "gbk");

위 내용은 PHP 가져오기 요청에 중국어 왜곡 문자가 나타나면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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