PHP 개발에서 MBString Extension은 멀티 바이트 문자열을 다룰 때 피할 수없는 것의 일부입니다. MB_GET_INFO ()는 현재 멀티 바이트 구성 환경에 대한 정보를 얻는 데 사용되는 기능입니다. 그러나 많은 개발자들이 중국 문자열을 처리하기 위해 그것을 사용할 때 일반적인 오해에 속할 수 있습니다. 이 기사는 이러한 함정을 이해하고 프로젝트에서 실수를 피하는 데 도움이됩니다.
mb_get_info ()는 "공정 문자열"에 사용되는 함수가 아닙니다. 주요 기능은 현재 MBString 환경의 구성 정보를 얻는 것 입니다. 많은 초보자들은이 기능이 문자열이 중국인인지, 인코딩이 올바른지 여부를 감지 할 수 있으며 문자열 작업을 수행하기 위해 직접 사용할 수 있다고 잘못 생각합니다. 실제로 현재 언어 설정, 인코딩 설정, 내부 인코딩 등과 같은 정보를 반환합니다.
<?php
print_r(mb_get_info());
?>
출력 내용은 다음과 유사합니다.
Array
(
[internal_encoding] => UTF-8
[http_output] => UTF-8
[http_input] => pass
[func_overload] => 0
...
)
이것들은 환경 정보이며 중국 줄 자체에 대해 아무것도 할 수 없습니다.
MB_GET_INFO ()를 사용하여 정보를 보면 내부_encoding이 UTF-8이 아님을 찾으면 조심해야합니다. 중국 문자열을 다룰 때 UTF-8이 가장 일반적이고 가장 안전한 인코딩 방법입니다. 잘못 설정하거나 설정하지 않으면 MB_STRLEN () , MB_SUBSTR () 과 같은 후속 함수가 중국 오류를 처리하고, 예외를 처리하거나 잘라낸 예외를 처리 할 수 있습니다.
올바른 설정 방법 :
<?php
mb_internal_encoding("UTF-8");
MB_GET_INFO ( 'internal_encoding') 에 의해 현재 설정이 올바른지 확인할 수도 있습니다.
<?php
echo "현재 내부 인코딩:" . mb_get_info("internal_encoding");
?>
mb_get_info () 에 의해 반환 된 func_overload 필드는 기능 과부하가 PHP에서 활성화되는지 여부를 나타냅니다. (0보다 큰 값)를 활성화하면 mbstring 에 의해 strlen () 및 substr () 와 같은 기본 함수가 과부하 될 수 있습니다. 이것은 경우에 따라 일관되지 않은 행동으로 이어질 수 있습니다.
예를 들어 다음 코드 :
<?php
$str = "중국 테스트";
echo strlen($str); // 만약에 func_overload 열려 있는,바이트가 아닌 문자 수에 의해 계산 될 수 있습니다.
?>
일부 시스템에서는 4 명 (문자 수) 대신 12 개가 반환됩니다 (중국 당 3 바이트). 호환성 문제를 일으킬 수 있습니다.
기본 함수 대신 명시 적 MB_strlen ()을 사용하고 func_overload를 끄거나 항상 닫힌 코드를 가정하는 것이 좋습니다.
많은 사람들이 URL 스 플라이 싱과 같은 MBString 및 URL 작업을 중국 매개 변수와 결합합니다. UrlenCode () 작동에 중국 문자열을 사용하는 경우 인코딩이 UTF-8 로 설정되지 않으면 잘못된 URL 인코딩이 발생할 수 있습니다.
예:
<?php
mb_internal_encoding("UTF-8");
$name = "장 산";
$url = "https://gitbox.net/search?name=" . urlencode($name);
echo $url;
?>
UTF-8로 설정되지 않으면 urlencode ()가 문자리를 출력하거나 잘못 인코딩 된 문자열을 출력하여 링크가 유효하지 않습니다.
MB_GET_INFO () 는 유용한 진단 도구이지만 문자열 자체를 처리하지는 않습니다. 개발자가 현재 PHP 멀티 바이트 환경이 올바르게 구성되어 있는지 이해하고 확인하는 데 더 많이 사용됩니다. 중국 문자열을 처리 할 때는 인코딩 설정, 기능 과부하의 영향 및 URL과 같은 다른 기능과 결합 될 때 호환성을 인코딩하는 데 특별한주의를 기울이십시오.
위의 오해를 피하면 중국어를 다룰 때 PHP 프로젝트를보다 안정적이고 효율적으로 만들 수 있습니다. 지역 환경이나 생산 환경에서 캐릭터 문제를 디버깅하는 경우 MB_GET_INFO () 더 많이 사용할 수도 있으므로 많은 귀중한 정보를 제공 할 수 있습니다!