현재 위치: > 최신 기사 목록> MB_GET_INFO 및 MB_SUBSTR로 멀티 바이트 문자열을 올바르게 차단하는 방법

MB_GET_INFO 및 MB_SUBSTR로 멀티 바이트 문자열을 올바르게 차단하는 방법

gitbox 2025-05-11

PHP에서 문자열을 처리 할 때, 중국어, 일본어 및 한국어와 같은 다중 바이트 문자가 관여하는 경우, 기존 문자열 함수 (예 : 서브 스트링 )를 사용하는 것은 문자 잘린 오류가 발생하기 쉬우므로 문자가 불완전하거나 불완전하게 발생합니다. 이 문제를 피하기 위해 PHP는 다중 바이트 스트링 확장 MBString을 제공합니다. 두 가지 매우 실용적인 기능은 MB_GET_INFOMB_SUBSTR 입니다.

이 기사는 예제를 사용 하여이 두 기능을 결합하여 멀티 바이트 문자열을 안전하고 올바르게 차단하는 방법을 설명합니다.

1. MB_GET_INFO () : 멀티 바이트 환경 정보를 이해합니다

MB_GET_INFO () 는 현재 멀티 파이트 환경 구성 정보를 얻는 데 사용됩니다. 이를 통해 내부 인코딩이 현재 사용중인 내용을 알 수 있으므로 문자열 작업을 수행 할 때 인코딩이 일관되게 유지됩니다.

 <?php
$info = mb_get_info();
echo "현재 사용되는 멀티 바이트 인코딩은입니다:" . $info['internal_encoding'];
?>

일반적으로 기본 설정으로 인한 문제를 피하기 위해 스크립트 시작시 인코딩을 명시 적으로 설정하는 것이 좋습니다.

 <?php
mb_internal_encoding('UTF-8'); // AS를 설정합니다 UTF-8
?>

2. MB_SUBSTR () : 다중 바이트 안전 문자열 차단

mb_substr () 는 문자열에서 지정된 길이의 하위 문자열을 가로 채고 여러 문자 인코딩을 지원하며 문자가 하나의 크기에 맞는 것을 피하는 데 사용되는 다중 바이트 버전의 substr () 입니다.

구문은 다음과 같습니다.

 mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string

매개 변수 설명 :

  • $ 문자열 : 원래 문자열

  • $ 시작 : 시작 위치 (0부터 시작)

  • $ 길이 : 선택 사항, 가로 채는 길이

  • $ 인코딩 : 선택 사항, 인코딩을 지정합니다 (명확하게 작성하는 것이 좋습니다)

3. 조합 사용 예 : Snap Article Abstract

UTF-8 인코딩 된 중국어 기사에서 처음 50자를 삭감한다고 가정 해 봅시다.

 <?php
mb_internal_encoding('UTF-8'); // 인코딩을 식별하십시오

$article = "PHP 널리 사용되는 오픈 소스 다목적 스크립팅 언어입니다.,특히 적합합니다 Web 개발 및 임베드 가능 HTML 가운데。";

// 인터셉트 전 50 캐릭터
$summary = mb_substr($article, 0, 50);

echo "기사 요약:" . $summary;
?>

MB_SUBSTR은 바이트가 아닌 문자로 처리되므로 출력 결과는 차별되지 않습니다.

4. 실제 전투 : 사용자 입력으로 멀티 바이트 문자열을 처리하십시오

예를 들어, 사용자가 주석을 제출하면 디스플레이 목록에 처음 30 자만 표시하고 "Full Text 읽기"링크를 제공하려고합니다.

 <?php
mb_internal_encoding('UTF-8');

$comment = "이것은 사용자가 제출 한 매우 흥미로운 의견입니다.,우리는 일부 콘텐츠 만 표시되기를 원합니다.。";

$preview = mb_substr($comment, 0, 30);

echo $preview . '... <a href="https://gitbox.net/full-comment.php?id=123">전체 텍스트를 읽으십시오</a>';
?>

이를 수행하면 컨텐츠가 지나치게 긴 콘텐츠로 인해 페이지가 부풀어 오르는 것을 방지 할뿐만 아니라 캐릭터의 전체 표시를 보장합니다.

5. 예방 조치 및 보충제

  • GBK, BIG5 등과 같은 다른 인코딩을 다루는 경우 각 MB_ 함수에서 인코딩 매개 변수를 명시 적으로 지정해야합니다.

  • MB_STRLEN ()은 가로 채기 전에 필요한지 여부를 결정하기 위해 함께 사용될 수 있습니다 (예 : 20 자만이 경우 30을 가로 채울 필요가 없습니다).

  • HTML 환경에서 인터셉트 된 컨텐츠를 출력 할 때 XSS 문제를 피하기 위해 탈출에주의를 기울여야합니다.