문자열 처리에 PHP를 사용할 때 MB_EREGI_REPLACE 기능은 공통 도구 중 하나였습니다. 이 기능은 중국어와 같은 다중 바이트 문자를 포함하는 텍스트를 처리하는 데 매우 적합한 다중 바이트 문자열의 정기적 인 사례 감수성 교체를 구현할 수 있습니다. 그러나 PHP 7.3+ 환경에서는 갑자기 코드에서 MB_EREGI_REPLACE를 사용하면 경고 나 오류가 발생할 수 있음을 발견했습니다. 나는이 기능이 더 이상 사용되지 않았다고 생각했지만 나중에 나는 그것을 깊이 연구하고 진실이 사실이 아니라는 것을 알았습니다.
간단히 말해서 MB_EREGI_REPLACE은 MBString 확장에서 제공하는 기능으로, 멀티 바이트 문자열에서 정규 표현식의 검색 교체를 수행하며 대소 문자를 사용하지 않습니다.
<?php
$original = "Hello World! hello world!";
$result = mb_eregi_replace("hello", "hi", $original);
echo $result; // 산출:hi World! hi world!
?>
이 기능의 기능은 특히 케이스 일치가 필요한 경우 다중 바이트 스트링 처리에서 매우 유용합니다.
PHP 7.3 이상에서 MB_EREGI_REPLACE는 다음과 유사한 경고를 자극합니다.
Deprecated: mb_eregi_replace(): This function is deprecated
이로 인해 많은 개발자들 (나 포함)은 PHP 관계자 가이 기능을 사용하지 않았다고 잘못 믿게되었습니다. 그래서 우리는 수동 소문자와 함께 mb_ereg_replace를 사용하거나 preg_replace를 대신 사용하는 것과 같은 다른 대안을 사용하려고 시도했습니다.
실제로, PHP 7.3에서 시작하여 MB_EREGI_REPLACE 에 의존하는 기본 일반 엔진이 변경되었습니다. PHP 공무원은 정기 엔진을 MBregex 에서 PCRE (PERL 호환 정규 표현식)로 마이그레이션했으며 MB_EREGI_REPLACE 기능 자체는 MBREGEX를 기반으로 구현하여 내부 메커니즘이 감가 상각 된 것으로 표시되지만 기능은 여전히 존재합니다.
즉, 다음과 같습니다.
이 기능은 완전히 제거되지 않았으며 공식적으로 "미래에 포기 될 수있다"고 공식적으로 표시되어 개발자가 점진적인 전환을하도록 상기시켜줍니다.
이것은 또한 일부 PHP 버전으로 사용할 수있는 이유를 설명하지만 경고를 제공합니다.
기본 MBregex 일반 라이브러리의 유지 보수 상태는 악화되고 더 이상 권장되지 않습니다.
mb_eregi_replace는 포기의 위험이 있으므로 다음 대안을 사용하는 것이 좋습니다.
<?php
$original = "Hello 세계! hello 세계!";
$pattern = "/hello/u"; // u 수정자는 멀티 바이트를 지원합니다,i 수정자는 대소 문자를 사용하지 않습니다
$result = preg_replace($pattern . "i", "hi", $original);
echo $result; // 산출:hi 세계! hi 세계!
?>
여기서 요점은 다음과 같습니다.
U 수정자는 정규 표현식이 UTF-8 멀티 바이트로 처리되도록합니다.
I 수정 자 구현은 사례를 무시합니다.
preg_replace는 PHP가 공식적으로 권장하는 현대적인 일반 대체 기능입니다.
PHP 8.0은 MB_STR_IREPLACE을 추가했으며, 이는 다중 바이트 케이스 감수성 문자열 교체 기능입니다. 구문은 간단합니다.
<?php
$original = "Hello 세계! hello 세계!";
$result = mb_str_ireplace("hello", "hi", $original);
echo $result; // 산출:hi 세계! hi 세계!
?>
프로젝트 런타임 환경이 PHP 8.0 이상을 지원하는 경우 가장 쉬운 대안입니다.
MB_EREGI_REPLACE 는 실제로 PHP 7.3+에서 더 이상 사용되지 않지만 완전히 제거되지는 않습니다.
이 포기는 기능을 직접 제거하기보다는 기본 일반 엔진 스위칭에서 비롯됩니다.
대신 u 와 i 수정 자와 함께 preg_replace를 사용하는 것이 좋습니다.
PHP 8.0 이상으로 업그레이드 할 수있는 경우 MB_STR_IREPLAPE를 사용하여 교체 할 수 있습니다.
앞으로 PHP 버전은 MB_EREGI_REPLACE를 완전히 제거 할 수 있으며 코드가 더 오래 걸리면 좋습니다.
이 기사가 MB_EREGI_REPLACE 의 현재 상황을 명확히하고 오래된 기능에 대해 맹목적으로 걱정하고 사용하지 않으며 코드의 현대성과 안정성을 유지하는 데 도움이되기를 바랍니다.