mb_encode_numericalentity 함수의 기본 구문은 다음과 같습니다.
<span><span><span class="hljs-title function_ invoke__">mb_encode_numericentity</span></span><span>(</span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-keyword">array</span></span><span> </span><span><span class="hljs-variable">$convmap</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$from_encoding</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$to_encoding</span></span><span>): </span><span><span class="hljs-keyword">string</span></span><span>
</span></span>
$ str : 문자열이 변환됩니다.
$ CONVMAP : 문자 변환 매핑 규칙은 숫자 엔티티로 변환 해야하는 문자를 지정하는 배열입니다.
$ from_encoding : 원래 문자 세트 (예 : UTF-8, ISO-8859-1 등).
$ to_encoding : 대상 문자 세트 (예 : UTF-8, ISO-8859-1 등).
이 함수는 String의 문자를 $ convmap 매개 변수로 지정된 규칙에 따라 HTML 또는 XML 형식 디지털 엔티티로 변환합니다. $ Convmap 배열의 구성은 변환 효과에 중요합니다.
$ Convmap 매개 변수는 배열이며, 각 요소의 서브 배달 세트로 구성되며 각각은 문자 변환 범위 또는 규칙을 정의합니다. 구조는 다음과 같습니다.
<span><span><span class="hljs-variable">$convmap</span></span><span> = [
[문자 코드에서, 문자 코드, 캐릭터 세트에서, 캐릭터 세트],
</span><span><span class="hljs-comment">// 더 많은 규칙</span></span><span>
];
</span></span>
문자 코드에서 : 이것은 숫자 엔티티의 변환을위한 시작 문자 코드이며, 일반적으로 원래 문자 세트에서 문자의 위치를 나타내는 정수입니다.
문자 코드 : 이것은 디지털 엔티티 변환의 최종 문자 코드이며 변환 범위를 지정합니다.
문자 세트에서 : 입력 문자열에서 인코딩 유형의 문자를 지정합니다.
문자 세트 : 변환 된 문자의 인코딩 유형, 일반적으로 UTF-8을 지정합니다.
예를 들어 $ ConvMap을 구성 할 때 문자 범위를 정의하여 디지털 엔티티로 변환되는 문자를 제어 할 수 있습니다.
$ ConvMap 매개 변수를 올바르게 구성하면 변환 규칙을 정확하게 제어하는 데 도움이 될 수 있습니다. 다음은 몇 가지 구성 팁입니다.
특정 특정 문자를 디지털 엔티티로 변환하려면 문자 코드 범위를 설정하여이를 수행 할 수 있습니다. ASCII 문자 이외의 모든 문자 만 숫자 엔티티로 변환하려고한다고 가정하면 ASCII 범위 외부의 문자 코드가 포함 된 $ Convmap을 구성 할 수 있습니다.
<span><span><span class="hljs-variable">$convmap</span></span><span> = [
[</span><span><span class="hljs-number">0x80</span></span><span>, </span><span><span class="hljs-number">0x10FFFF</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>]
];
</span></span>
이 구성은 UTF-8 인코딩 범위의 모든 문자가 0x80 (즉, ASCII가 아닌 문자)과 동일하다는 것을 의미합니다.
HTML 컨텐츠를 전문으로하고 특정 특수 기호 (예 : < , > 등 )를 HTML 디지털 엔티티로 변환하려면 해당 문자 범위를 설정하여이를 수행 할 수 있습니다.
<span><span><span class="hljs-variable">$convmap</span></span><span> = [
[</span><span><span class="hljs-number">0x20</span></span><span>, </span><span><span class="hljs-number">0x2F</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>], </span><span><span class="hljs-comment">// 전환하다ASCII구두점 마크</span></span><span>
[</span><span><span class="hljs-number">0x3A</span></span><span>, </span><span><span class="hljs-number">0x40</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>], </span><span><span class="hljs-comment">// 전환하다冒号到@성격</span></span><span>
];
</span></span>
이 구성 후 조건을 충족하는 모든 문자는 해당 디지털 엔티티로 변환됩니다.
유니 코드 문자의 경우 모든 언어와 특수 기호가 올바르게 변환되도록 더 넓은 범위를 정의 할 수 있습니다. 이 방법은 다국어 문자가 포함 된 시나리오에 특히 유용합니다.
<span><span><span class="hljs-variable">$convmap</span></span><span> = [
[</span><span><span class="hljs-number">0x3000</span></span><span>, </span><span><span class="hljs-number">0x303F</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>], </span><span><span class="hljs-comment">// 전환하다CJK상징그리고구두점 마크</span></span><span>
];
</span></span>
이 구성은 모든 유니 코드 문자를 0x3000 에서 0x303f 사이의 디지털 엔티티로 변환하며 중국어, 일본어, 한국 및 기타 언어의 특수 상징에 적합합니다.
mb_encode_numericalentity 는 강력하지만 사용할 때 다음 사항에 대해 다음 사항을 기록해야합니다.
들어오는 문자 인코딩 ( $ from_encoding 및 $ to_encoding )이 올바른지 확인하십시오. 예를 들어, 소스 문자열이 UTF-8 인코딩이고 대상 인코딩이 ISO-8859-1 인 경우 해당 인코딩을 명시 적으로 지정하여 차량 코드 또는 변환 오류를 피해야합니다.
$ ConvMap을 정의 할 때 문자 범위를 재정의하십시오. 범위가 너무 좁아지면 일부 문자는 변환되지 않을 수 있습니다. 범위가 너무 커지면 불필요하게 다른 문자의 변환에 영향을 줄 수 있습니다. 따라서 실제 요구에 따라 문자 범위를 개선하는 것이 가장 좋습니다.
여러 문자 세트의 매우 큰 문자열 또는 변환의 경우 MB_ENCODE_NUMERICALENTITY는 성능에 영향을 줄 수 있습니다. 변환 프로세스를 더 작은 단위로 분할하거나 불필요한 처리를 피하기 위해 특정 문자 세트 만 변환하는 것을 고려하십시오.
다른 PHP 버전 또는 환경은 MB_encode_numericalentity를 다르게 지원할 수 있습니다. 그것을 사용할 때는 MBString 확장이 PHP 환경에 올바르게 설치되고 확장 버전이 필요한 기능을 지원하는지 확인하십시오.
다음은 특수 문자를 포함하는 텍스트를 처리하기 위해 MB_ENCODE_NUMERICALENTITY를 사용하는 방법을 보여주는 실용적인 응용 프로그램 사례입니다.
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"这是一个测试성격串,포함하다 <、> 그리고 & 상징。"</span></span><span>;
</span><span><span class="hljs-variable">$convmap</span></span><span> = [
[</span><span><span class="hljs-number">0x80</span></span><span>, </span><span><span class="hljs-number">0x10FFFF</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>] </span><span><span class="hljs-comment">// 비ASCII성격전환하다为数字实体</span></span><span>
];
</span><span><span class="hljs-variable">$result</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_encode_numericentity</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$convmap</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-keyword">echo</span></span><span> </span><span><span class="hljs-variable">$result</span></span><span>;
</span></span>
출력은 모든 비 ASCII 문자가 다음과 같은 디지털 엔티티로 변환된다는 것입니다.
<span><span>这是一个测试성격串,포함하다 </span><span><span class="hljs-selector-tag">&</span></span><span><span class="hljs-selector-id">#60</span></span><span>;、</span><span><span class="hljs-selector-tag">&</span></span><span><span class="hljs-selector-id">#62</span></span><span>; 그리고 </span><span><span class="hljs-selector-tag">&</span></span><span><span class="hljs-selector-id">#38</span></span><span>; 상징。
</span></span>
이러한 처리 방법은 XSS 공격, HTML 렌더링 오류 및 기타 문제를 피하는 데 매우 도움이됩니다.