다국어 웹 사이트를 개발하거나 외부 데이터 소스를 처리 할 때 캐릭터 인코딩의 혼란은 종종 두통입니다. 인코딩 설정이 올바르지 않으면 최소한 차량 코드가 발생하고 데이터가 손실되고 기능은 비정상적입니다.
PHP에서 MBString Extension은 멀티 바이트 문자를 처리하기위한 많은 기능을 제공하며, 그 중 MB_GET_INFO ()는 문제를 인코딩하는 데 매우 유용한 도구입니다.
MB_GET_INFO () 는 PHP MBString Extension의 함수이며 현재 멀티 바이트 스트링 처리의 구성 정보를 얻습니다.
현재 내부 인코딩, HTTP 입력/출력 인코딩, 언어 설정 등을 반환하여 스크립트의 현재 인코딩 환경을 빠르게 이해할 수 있습니다.
기능 서명은 매우 간단합니다.
array mb_get_info ([ string $type = "all" ] )
매개 변수가 전달되지 않으면 모든 구성 정보가 기본적으로 반환됩니다. "Internal_encoding" 과 같은 유형을 전달하면 해당 정보 만 반환됩니다.
PHP는 특히 UTF-8, GBK 및 Shift-JIS와 같은 다중 바이트 인코딩을 처리 할 때 기본적으로 문자 인코딩에 "민감한"것이 아닙니다.
일반적인 이유는 다음과 같습니다.
입력 인코딩은 스크립트 처리와 일치하지 않습니다
출력의 인코딩 설정이 잘못되었습니다
데이터베이스 연결 중 오류 인코딩
서버 기본 로케일 설정 문제
현재 현재 환경에서 어떤 인코딩이 사용되는지 모른다면 올바른 약을 처방하기가 어려울 것입니다. MB_GET_INFO () 는 우리가 찾는 데 도움이 될 수 있습니다.
다음은 MB_GET_INFO ()를 사용하여 문제를 찾는 방법을 보여주는 간단한 예입니다.
<?php
// 현재 멀티 파이트 처리에 대한 모든 구성을보십시오
$info = mb_get_info();
print_r($info);
// 내부 코딩에 중점을 둡니다
echo "Internal Encoding: " . mb_internal_encoding() . PHP_EOL;
// 인코딩을 설정하십시오 UTF-8,Barled Code를 피하십시오
mb_internal_encoding("UTF-8");
// 다시 확인하십시오
echo "New Internal Encoding: " . mb_internal_encoding() . PHP_EOL;
?>
출력은 다음과 유사 할 수 있습니다.
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_input] => UTF-8
[language] => neutral
...
)
Internal Encoding: UTF-8
New Internal Encoding: UTF-8
Internal_Encoding이 UTF-8 (예 : ISO-8859-1 )이 아니라는 것을 알게되면 이는 차량 코드의 소스 일 가능성이 높습니다.
mb_internal_encoding ( "UTF-8") 으로 직접 재설정하면 차량 코드 문제를 피할 수 있습니다.
다음과 같이 사용자 입력을 프론트 엔드로 반환하는 간단한 인터페이스가 있다고 가정합니다.
<?php
header('Content-Type: text/html; charset=UTF-8');
// 현재 내부 코드를 확인하십시오
if (mb_internal_encoding() !== 'UTF-8') {
mb_internal_encoding('UTF-8');
}
// 사용자 입력을 가정합니다(아마도 형식에서、인터페이스 등)
$user_input = "안녕하세요,세계!";
// 산출
echo htmlspecialchars($user_input, ENT_QUOTES, 'UTF-8');
?>
여기서, 사용자가 GB2312와 같은 다른 인코딩을 제출하더라도 서버는 UTF-8으로 균일하게 처리하여 출력되면, 차량 코드의 확률을 크게 줄일 수 있습니다.
보다 포괄적 인 인코딩 탐지가 필요한 경우 MB_DETECT_ENCODING () 와 함께 사용하여 자동으로 식별하고 변환 할 수도 있습니다.
MB_GET_INFO () 및 MBSTRING 의 사용에 대해 더 알고 싶다면 공식 문서를 참조하십시오.
https://gitbox.net/php/manual/zh/function.mb-get-info.php