PHP에서 MB_PARSE_STR 함수는 URL에 인코딩 된 쿼리 문자열을 변수 배열로 구문 분석하는 데 사용됩니다. MB_PARSE_STR는 특히 멀티 파이트 문자 세트를 포함하는 문자열을 다룰 때 PARSE_STR 함수와 비교하여 더 넓은 범위의 문자 인코딩을 지원합니다. 이 기능은 매우 유용하지만 인코딩이 올바르게 지정되지 않으면 일련의 문제가 발생할 수 있습니다. 이 기사는 MB_PARSE_STR을 사용할 때 일반적인 오류를 탐색하며 인코딩을 지정하면 구문 분석 문제가 발생할 수있는 이유가 있습니다.
MB_PARSE_STR 의 함수는 쿼리 문자열을 변수로 구문 분석하는 PHP의 내장 된 parse_str 함수와 유사합니다. 문자 인코딩이 지정되지 않으면 MB_PARSE_STR는 기본 인코딩을 사용합니다. 이 기능의 기본 구문은 다음과 같습니다.
<span><span><span class="hljs-title function_ invoke__">mb_parse_str</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">$arr</span></span><span>, </span><span><span class="hljs-keyword">string</span></span><span> </span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-literal">null</span></span><span>): </span><span><span class="hljs-keyword">void</span></span><span>
</span></span>$ str : 입력 된 쿼리 문자열.
$ ARR : 구문 분석 키 값 쌍이 포함 된 출력 배열.
$ 인코딩 : 선택적 문자 인코딩. 지정되지 않은 경우 MB_PARSE_STR은 MBString 확장자의 기본 인코딩을 사용합니다.
PHP의 MB_PARSE_STR 함수는 지정된 인코딩을 기반으로 문자 구문 분석을 수행하는 표준 parse_str 와 다릅니다. 인코딩이 지정되지 않으면 다음과 같은 일반적인 오류가 발생할 수 있습니다.
쿼리 문자열에 멀티 바이트 문자 (예 : 중국어, 일본어, 한국 등)가 포함 된 경우, 지정되지 않은 인코딩으로 인해 이러한 문자가 황폐 해지거나 손실되면 잘못 해석 될 수 있습니다. 이는 MB_PARSE_STR 에서 사용하는 인코딩이 실제 문자 세트와 일치하지 않아서 구문 분석 실패를 초래하기 때문입니다.
예를 들어 다음 쿼리 문자열을 고려하십시오.
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"name=%E4%BD%A0%E5%A5%BD"</span></span><span>;
</span></span>인코딩이 지정되지 않은 경우 MB_PARSE_STR는 %E4%BD%A0%E5%A5%BD를 올바르게 구문 분석하지 않고 대신이를 갈 블레드 또는 잘못된 값으로 변환 할 수 있습니다.
MB_PARSE_STR 은 다중 바이트 문자 세트 (예 : UTF-8, Shift-Jis, EUC-JP 등)와 함께 설계되었지만 인코딩이 명시 적으로 지정되지 않은 경우 MB_PARSE_STR은 비 ASCII 문자 세트에서 데이터를 올바르게 처리하지 못할 수 있습니다. 이렇게하면 겉보기에는 일반적인 문자가 제대로 구문 분석되지 않습니다.
쿼리 문자열에 올바른 인코딩 형식을 지정하지 않고 특수 기호 또는 비표준 문자 (예 : 중국어, 러시아어, 아랍어 등)가 포함 된 경우 MB_PARSE_STR은 이러한 데이터를 오도하거나 잘못 해석 할 수 있습니다. 예를 들어, 중국어는 UTF-8 인코딩에서 정확하게 구문 분석되지만 ISO-8859-1 인코딩을 사용하여 구문 분석되면이 문자는 차별화되거나 인식되지 않은 문자로 잘못 해석 될 수 있습니다.
인코딩 불일치로 인해 구문 분석 오류를 피하려면 mb_parse_str를 호출 할 때 문자 인코딩을 명시 적으로 지정하는 것이 좋습니다. 이를 통해 쿼리 문자열의 멀티 바이트 문자를 올바르게 구문 분석 할 수 있습니다.
응용 프로그램이 UTF-8 인코딩을 기반으로하는 경우 MB_PARSE_STR을 호출 할 때 UTF-8 인코딩을 명시 적으로 지정하는 것이 좋습니다.
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"name=%E4%BD%A0%E5%A5%BD"</span></span><span>;
</span><span><span class="hljs-variable">$arr</span></span><span> = [];
</span><span><span class="hljs-title function_ invoke__">mb_parse_str</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>, </span><span><span class="hljs-string">'UTF-8'</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span></span>산출:
<span><span><span class="hljs-keyword">Array</span></span><span>
(
[</span><span><span class="hljs-type">name</span></span><span>] => 안녕하세요
)
</span></span>쿼리 문자열의 인코딩 형식을 확인할 수없는 경우 다른 방법은 인코딩을 동적으로 감지하고 조정하는 것입니다. mb_detect_encoding 함수를 사용하여 입력 문자열의 인코딩 유형을 감지 할 수 있습니다.
<span><span><span class="hljs-variable">$str</span></span><span> = </span><span><span class="hljs-string">"name=%E4%BD%A0%E5%A5%BD"</span></span><span>;
</span><span><span class="hljs-variable">$encoding</span></span><span> = </span><span><span class="hljs-title function_ invoke__">mb_detect_encoding</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, [</span><span><span class="hljs-string">'UTF-8'</span></span><span>, </span><span><span class="hljs-string">'GB2312'</span></span><span>, </span><span><span class="hljs-string">'ISO-8859-1'</span></span><span>]);
</span><span><span class="hljs-variable">$arr</span></span><span> = [];
</span><span><span class="hljs-title function_ invoke__">mb_parse_str</span></span><span>(</span><span><span class="hljs-variable">$str</span></span><span>, </span><span><span class="hljs-variable">$arr</span></span><span>, </span><span><span class="hljs-variable">$encoding</span></span><span>);
</span><span><span class="hljs-title function_ invoke__">print_r</span></span><span>(</span><span><span class="hljs-variable">$arr</span></span><span>);
</span></span>이러한 방식으로 실제 조건에 따라 자동으로 감지하고 구문 분석하고 적절한 인코딩을 사용할 수 있습니다.
MB_PARSE_STR을 사용할 때 올바른 문자 인코딩을 지정하지 않으면 특히 멀티 파이트 문자 세트를 다룰 때 다양한 구문 분석 문제가 발생할 수 있습니다. 쿼리 문자열이 올바르게 구문 분석되도록하기 위해, 특히 사용자 입력 또는 외부 데이터를 처리 할 때 MB_PARSE_STR을 호출 할 때 문자 인코딩을 항상 명시 적으로 지정하는 것이 좋습니다. 또한 다양한 문자 인코딩 방법을 이해하고 조정하면 프로그램의 견고성을 향상시키고 인코딩 문제로 인한 데이터 손실 또는 차량 코드를 피할 수 있습니다.