MB_DECODE_NUMERICALENTITY 함수의 기본 구문은 다음과 같습니다.
mb_decode_numericentity(string $str, array $map, string $encoding): string|false
$ str : 구문 분석 할 문자열은 일반적으로 숫자 엔티티를 포함하는 html 또는 xml에 인코딩 된 문자열입니다.
$ 맵 : 숫자 엔티티의 매핑 범위를 문자로 정의하는 연관 배열.
$ 인코딩 : 입력 문자열의 문자 인코딩, 일반적으로 UTF-8 .
가장 일반적인 사용 시나리오는 웹 페이지에서 탈출 한 HTML 문자 (예 : "中")를 해당 한자 (예 : "中")로 변환하는 것입니다. 예를 들어:
$input = "中文";
$output = mb_decode_numericentity($input, array(0x80, 0xFFFF), 'UTF-8');
echo $output; // 산출 “중국인”
이 함수는 중립 텍스트를 실제 문자 "중간"및 "텍스트"로 변환합니다.
MB_DECODE_NUMERICALENTITY를 사용할 때 가장 쉬운 문제 중 하나는 문자 인코딩 불일치입니다. 이 기능은 전달 된 문자열이 $ 인코딩 매개 변수와 일치해야합니다. 입력 한 문자열이 인코딩 으로 UTF-8을 인코딩하고 전달하는 경우, 구문 분석 결과가 잘못 될 수 있습니다.
전달 된 문자열이 $ 인코딩 매개 변수의 인코딩과 일치하는지 확인하십시오. 문자열이 GBK 인코딩 된 경우 다음과 같이 호출해야합니다.
$output = mb_decode_numericentity($input, array(0x80, 0xFFFF), 'GBK');
또한 변환을 인코딩하기 전에 문자 인코딩을 확인하고 통합하는 것이 가장 좋습니다.
맵 매개 변수는 디지털 엔티티 맵의 범위를 정의합니다. 모든 유효한 HTML 숫자 문자 엔티티를 해당 문자로 다시 변환하려면 맵 매개 변수를주의 깊게 설정해야합니다. 범위 세트가 너무 작 으면 일부 문자는 제대로 구문 분석되지 않을 수 있습니다.
예를 들어, 배열 (0x80, 0xffff) 만 지정하면이 범위의 문자 만 구문 분석됩니다. 더 넓은 문자 세트를 구문 분석하려면이 범위를 조정해야 할 수도 있습니다.
일반적으로 배열 (0, 0xffff)을 사용하면 모든 유효한 문자 엔티티 범위가 무시됩니다. 예를 들어:
$output = mb_decode_numericentity($input, array(0, 0xFFFF), 'UTF-8');
이 연습은 가장 일반적인 문자 세트를 올바르게 구문 분석 할 수 있도록합니다.
일부 웹 페이지에는 HTML 엔티티 (예 : & )와 디지털 엔티티 (예 : 여기 )가 모두 포함될 수 있습니다. 이 두 가지 탈출 방법을 동시에 사용하는 경우 MB_DECODE_NUMERICALENTITY 호출 직접 디지털 엔티티 만 처리 할 수 있지만 자동으로 HTML 엔티티를 처리 할 수는 없습니다. 이 경우 html_entity_decode 함수를 사용하여 HTML 엔티티를 해당 문자로 변환 한 다음 MB_DECODE_NUMERICALENTITY로 디지털 엔티티를 처리해야 할 수도 있습니다.
먼저 HTML_ENTITY_DECODE를 사용하여 HTML 엔티티를 처리 한 다음 MB_DECODE_NUMERICALENTITY를 디지털 엔티티를 구문 분석합니다.
$input = html_entity_decode($input, ENT_QUOTES, 'UTF-8');
$output = mb_decode_numericentity($input, array(0, 0xFFFF), 'UTF-8');
이를 통해 두 엔티티를 올바르게 구문 분석 할 수 있습니다.
MB_DECODE_NUMERICALENTITY 함수는 특히 긴 문자열이나 많은 수의 수치 엔티티를 다룰 때 처리가 비교적 느립니다. 애플리케이션에서 이러한 종류의 분석이 자주 필요한 경우 성능 병목 현상이 발생할 수 있습니다.
이 경우 분석 최적화를 고려할 수 있습니다. 예를 들어, 프론트 엔드의 엔티티를 전제로 처리하거나 캐시를 사용하여 동일한 문자열을 여러 번 구문 분석하지 않아도됩니다.
MB_DECODE_NUMERICALENTITY 함수는 잘못된 디지털 엔티티를 처리 할 때 FALSE를 반환합니다. 입력에 해결되지 않은 숫자 엔티티가 포함 된 경우 추가 처리를 위해 기능의 반환 값을 확인해야합니다.
구문 분석 실패로 인한 오류를 피하기 위해 MB_DECODE_NUMERICALENTITY를 호출 한 후 반환 값이 거짓 인지 확인하십시오.
$output = mb_decode_numericentity($input, array(0, 0xFFFF), 'UTF-8');
if ($output === false) {
echo "분석이 실패했습니다!";
} else {
echo $output;
}