멀티 바이트 문자열 처리에 PHP를 사용할 때 MB_EREGI_REPLACE는 멀티 바이트 인코딩의 정기적 인 교체를 지원하고 대소 문자를 사용하는 매우 실용적인 기능입니다. 그러나 많은 개발자들이 사용할 때 혼란을 겪습니다. 교체 결과는 배열처럼 보이지만 실제로는 문자열입니다.
이 기사는이 현상을 분석하여 MB_EREGI_REPLACE 의 반환 값 유형과 사용을 올바르게 이해하는 데 도움이됩니다.
MB_EREGI_REPLACE 는 PHP MBString 확장자가 제공하는 다중 바이트 정기 교체 기능입니다. 이 기능은 preg_replace 와 유사하지만 멀티 바이트 문자 세트에 최적화됩니다. 기능 프로토 타입은 다음과 같습니다.
<code> 문자열 mb_eregi_replace (String $ pattern, String $ 대체, String $ string [, String $ 옵션 = "msr"]) </code>매개 변수 설명 :
$ 패턴 : 정규 표현 패턴, 사례에 민감하지 않습니다.
$ 교체 : 교체 된 문자열.
$ string : 검색 할 대상 문자열.
$ 옵션 : 정규 표현식 수정 자, "MSR" 에 대한 기본값.
리턴 값은 대체 문자열입니다.
대부분의 경우 개발자는 다음을 찾을 수 있습니다.
<code> $ result = mb_eregi_replace ( 'Pattern', 'Replacement', $ dired); var_dump ($ result); </코드>예를 들어 출력 결과에 배열 형 구조가 나타납니다.
<code> 문자열 (14) "Array (Content)"</code>실제로 교체 문자열 $ 대체물 에는 변수가 포함되어 있거나 $ 주제 자체가 배열과 같은 문자열 양식을 가지고 있거나 정기 캡처 그룹 참조가 $ 교체 에 사용되지만 참조 컨텐츠가 올바르게 처리되지 않으므로 교체 된 문자열이 배열 정보를 포함하는 것으로 보입니다.
또 다른 일반적인 오해는 일반 캡처 그룹 (예 : \\ 1 , $ 1 )이 배열로 이해되지만 실제로 문자열의 텍스트로만 나타납니다.
다음 문자열이 있다고 가정합니다.
<code> $ dist시 = "테스트 문자열 인 M66.net에 오신 것을 환영합니다."; </코드>MB_EREGI_REPLACE를 사용하여 도메인 이름을 example.com 으로 바꾸고 싶습니다. 쓰기 방법은 다음과 같습니다.
<code> $ result = mb_eregi_replace ( 'm66 \ .net', 'example.com', $ distorcy); echo $ 결과; </코드>산출:
<code> 테스트 문자열 인 example.com에 오신 것을 환영합니다. </코드>여기에서 반환되는 것은 문자열 유형이며 $ result는 배열이 아닙니다.
배열 유형은 교체 문자열에 사용됩니다.
$ 대체가 문자열이 아닌 배열로 전달되면 오류가 발생하지만 일반적으로 오류가보고되며 배열처럼 보이는 문자열을 조용히 반환하지 않습니다.
교체 내용에 사용 된 캡처 그룹의 오해 :
당신이 사용한다고 가정합니다 :
<code> $ result = mb_eregi_replace ( '(m66 \ .net)', '$ 1.com', $ distorct); </코드>여기서 $ 1 은 캡처 그룹 참조이지만, 올바르게 구문 분석되지 않으면 대체 된 문자열이 문자 그대로 $ 1.com 이 될 수있어 사람들이 실수로 배열 또는 특수 구조라고 생각하게 할 수 있습니다.
MB_EREGI_REPLAPE RETUNT 값은 항상 문자열 입니다.
"배열처럼"결과가 표시되면 교체 문자열과 입력 문자열에 혼란을 유발할 수있는 내용이 포함되어 있는지 확인하십시오.
캡처 그룹을 올바르게 사용하면 구문이 올바른지 확인하고 예기치 않은 콘텐츠를 출력하지 마십시오.
디버깅 중에 var_dump를 사용하면 가변 유형을 확인하는 데 도움이 될 수 있습니다.
$ result = mb_eregi_replace ($ Pattern, $ 대체, $ 주제);
echo $ 결과; // 출력 : 자세한 내용은 example.com을 방문하십시오.
?>
</코드>