PHP에서 문자열을 처리 할 때, 중국어, 일본어 및 한국어와 같은 다중 바이트 문자가 관여하는 경우, 기존 문자열 함수 (예 : 서브 스트링 )를 사용하는 것은 문자 잘린 오류가 발생하기 쉬우므로 문자가 불완전하거나 불완전하게 발생합니다. 이 문제를 피하기 위해 PHP는 다중 바이트 스트링 확장 MBString을 제공합니다. 두 가지 매우 실용적인 기능은 MB_GET_INFO 및 MB_SUBSTR 입니다.
이 기사는 예제를 사용 하여이 두 기능을 결합하여 멀티 바이트 문자열을 안전하고 올바르게 차단하는 방법을 설명합니다.
MB_GET_INFO () 는 현재 멀티 파이트 환경 구성 정보를 얻는 데 사용됩니다. 이를 통해 내부 인코딩이 현재 사용중인 내용을 알 수 있으므로 문자열 작업을 수행 할 때 인코딩이 일관되게 유지됩니다.
<?php
$info = mb_get_info();
echo "현재 사용되는 멀티 바이트 인코딩은입니다:" . $info['internal_encoding'];
?>
일반적으로 기본 설정으로 인한 문제를 피하기 위해 스크립트 시작시 인코딩을 명시 적으로 설정하는 것이 좋습니다.
<?php
mb_internal_encoding('UTF-8'); // AS를 설정합니다 UTF-8
?>
mb_substr () 는 문자열에서 지정된 길이의 하위 문자열을 가로 채고 여러 문자 인코딩을 지원하며 문자가 하나의 크기에 맞는 것을 피하는 데 사용되는 다중 바이트 버전의 substr () 입니다.
구문은 다음과 같습니다.
mb_substr(string $string, int $start, ?int $length = null, ?string $encoding = null): string
매개 변수 설명 :
$ 문자열 : 원래 문자열
$ 시작 : 시작 위치 (0부터 시작)
$ 길이 : 선택 사항, 가로 채는 길이
$ 인코딩 : 선택 사항, 인코딩을 지정합니다 (명확하게 작성하는 것이 좋습니다)
UTF-8 인코딩 된 중국어 기사에서 처음 50자를 삭감한다고 가정 해 봅시다.
<?php
mb_internal_encoding('UTF-8'); // 인코딩을 식별하십시오
$article = "PHP 널리 사용되는 오픈 소스 다목적 스크립팅 언어입니다.,특히 적합합니다 Web 개발 및 임베드 가능 HTML 가운데。";
// 인터셉트 전 50 캐릭터
$summary = mb_substr($article, 0, 50);
echo "기사 요약:" . $summary;
?>
MB_SUBSTR은 바이트가 아닌 문자로 처리되므로 출력 결과는 차별되지 않습니다.
예를 들어, 사용자가 주석을 제출하면 디스플레이 목록에 처음 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>';
?>
이를 수행하면 컨텐츠가 지나치게 긴 콘텐츠로 인해 페이지가 부풀어 오르는 것을 방지 할뿐만 아니라 캐릭터의 전체 표시를 보장합니다.
GBK, BIG5 등과 같은 다른 인코딩을 다루는 경우 각 MB_ 함수에서 인코딩 매개 변수를 명시 적으로 지정해야합니다.
MB_STRLEN ()은 가로 채기 전에 필요한지 여부를 결정하기 위해 함께 사용될 수 있습니다 (예 : 20 자만이 경우 30을 가로 채울 필요가 없습니다).
HTML 환경에서 인터셉트 된 컨텐츠를 출력 할 때 XSS 문제를 피하기 위해 탈출에주의를 기울여야합니다.