MB_EREGI_REPLACE () 는 PHP에서 멀티 바이트 문자열을 처리 할 때 매우 유용한 기능입니다. Eregi_Replace () 와 유사하게 작동하지만 UTF-8 인코딩 된 중국어 텍스트와 같은 멀티 바이트 문자열에 특별히 사용됩니다. 그러나 실제로 사용하면 일반적인 문제가 발생할 수 있습니다. mb_eregi_replace ()를 사용하는 동안 교체 전후에 나타날 수있는 추가 공간을 어떻게 제거 할 수 있습니까?
예를 들어, 텍스트에서 HTML 링크로 [url] http://m66.net/page [/url]을 교체하고, 교체 결과가 전면 및 후면 공간의 영향을받지 않도록하거나 추가 공간을 가져 오지 않도록한다고 가정합니다. 현재 Trim ()가 유용 할 수 있습니다.
먼저 기본 대체 예를 살펴 보겠습니다.
<code> $ text = "링크는 다음과 같습니다. [url] http://m66.net/page [/url], 클릭하십시오."; $ Pattern = ' (.*?) ';
$ 대체 = '<a href = "\ 1"> link </a>';
$ result = mb_eregi_replace ($ Pattern, $ 대체, $ 텍스트);
echo $ 결과;
</코드>
출력 결과는 다음과 같습니다.
여기 링크가 있습니다:<a href="http://m66.net/page">링크</a> ,클릭하십시오。
표면에서 괜찮은 것처럼 보이지만 [url] 태그 중간에 내용이 전후에있는 경우 : 예를 들어.
[URL] http://m66.net/page [/URL]
교체 후 HTML 링크의 HREF 속성에는 추가 공간이 포함되어있어 링크가 올바르게 열리지 않거나 예외를 표시 할 수 있습니다.
이 문제를 해결하려면 콜백 함수에서 Trim ()을 사용해야합니다. 불행히도 MB_EREGI_REPLACE ()는 콜백 함수를 직접 지원하지 않습니다. 그러나 우리는 mb_ereg_replace_callback ()을 사용하여 동일한 목적을 달성 할 수 있습니다.
수정 된 코드는 다음과 같습니다.
<code> $ text = "링크는 다음과 같습니다. [url] http://m66.net/page [/url], 클릭하십시오.";$ Pattern = ' (.*?) ';
$ result = mb_ereg_replace_callback (
$ 패턴,
함수 ($ 일치) {
$ url = trim ($ matches [1]);
반환 '<a href = "'. $ url. '"> link </a>';
},
$ 텍스트
);
echo $ 결과;
</코드>
출력은 다음과 같습니다.
여기 링크가 있습니다:<a href="http://m66.net/page">링크</a> ,클릭하십시오。
이번에는 링크에 추가 공간이 없으며 성능은 더 안정적이고 전문적입니다.
MB_EREGI_REPLACE ()는 사례에 민감하지 않은 다중 바이트 교체를 처리 할 때 편리하지만 preg_replace_callback () 와 같은 사용자 정의 로직을 전달할 수는 없습니다. 공간 문제를 해결하기 위해 모범 사례는 mb_ereg_replace_callback ()을 사용하여 trim () 과 같은 문자열 처리 기능을 사용하여 일치하는 결과를보다 유연하게 처리 할 수 있습니다. 이러한 방식으로 출력 링크 또는 기타 교체 콘텐츠가 더 정확하고 강력하며 전반적인 사용자 경험을 향상시킬 수 있습니다.