PHP에서 멀티 바이트 스트링을 처리 할 때, 일반적으로 사용되는 함수는 MB_Strcut 이며, 바이트 수에 따라 문자열을 가로 채고 UTF-8과 같은 멀티 바이트 인코딩 된 텍스트를 처리하는 데 적합합니다. 그러나 많은 개발자들은 종종 MB_Strcut을 사용하여 현을 가로 채기 위해 인코딩 오류를 발생시켜 결과를 차단하거나 캐릭터의 절반을 자르게됩니다. 이 기사는 MB_Strcut를 올바르게 사용하여 오류를 인코딩하지 않고 실용적인 팁을 공유하는 방법을 자세히 설명합니다.
MB_STRCUT 는 바이트 길이로 문자열을 가로 채기위한 PHP의 멀티 바이트 스트링 함수 중 하나입니다. MB_SUBSTR 과 달리 MB_STRCUT는 문자가 아닌 바이트를 기반으로 차단됩니다. 다중 바이트 인코딩을 처리 할 때 가로 채기 길이를보다 정확하게 제어 할 수 있으며, 차량이 잘린 캐릭터가 잘리지 않도록합니다.
기능 프로토 타입 :
mb_strcut(string $str, int $start, ?int $length = null, ?string $encoding = null): string
$ str : 문자열을 입력하십시오.
$ 시작 : 바이트 수로 계산 된 시작 위치.
$ 길이 : 차단 된 바이트 수 (선택 사항).
$ 인코딩 : 문자열 인코딩, 내부 인코딩은 기본적으로 사용됩니다.
MB_STRCUT를 사용하여 문자열을 가로 채면 $ start 또는 $ length가 다중 바이트 문자 중간에 부적절하게 떨어지면 잘린 캐릭터 바이트가 불완전하기 때문에 갈색 코드가 나타납니다. 특히 UTF-8 인코딩의 경우 중국어는 일반적으로 3 바이트로 구성됩니다. 바이트를 가로 채면 시작점과 종점이 모두 문자 경계인지 확인해야합니다.
mb_strcut을 호출 할 때, 명시 적으로 문자열 인코딩을 지정하는 것은 일관되지 않은 기본 인코딩으로 인한 문제를 피하는 첫 번째 단계입니다.
$encoding = 'UTF-8';
$result = mb_strcut($str, $start, $length, $encoding);
가로 채기 전에 MB_Strlen을 사용하여 문자열 문자 길이를 얻으려면 $ 시작 과 범위에서 $ 길이를 피하십시오. 동시에 MB_SUBSTR을 결합하여 캐릭터의 절반이 잘리지 않도록하십시오.
$length = 10;
if (mb_strlen($str, $encoding) > $length) {
$result = mb_substr($str, 0, $length, $encoding);
} else {
$result = $str;
}
바이트 수를 가로 채어야하는 경우 먼저 인터셉트 바이트 범위에 해당하는 전체 문자 수를 계산 한 다음 MB_Substr을 사용하여 인터셉트하십시오.
function safe_mb_strcut(string $str, int $start, int $length, string $encoding = 'UTF-8'): string {
$substr = mb_strcut($str, $start, $length, $encoding);
// mb_strcut 때로는 캐릭터의 절반이 잘릴 수 있습니다,트랜스 코딩은 그것이 유효한지 확인합니다
if (mb_check_encoding($substr, $encoding)) {
return $substr;
}
// 불완전한 경우,길이를 줄입니다,완료까지
while ($length > 0 && !mb_check_encoding($substr, $encoding)) {
$length--;
$substr = mb_strcut($str, $start, $length, $encoding);
}
return $substr;
}
$str = "이것은 테스트 문자열입니다,중국어를 포함합니다English";
$start = 0;
$length = 15; // 바이트로 가로 채기
$result = safe_mb_strcut($str, $start, $length, 'UTF-8');
echo $result;
이것은 바이트 잘린 문제를 피합니다.
MB_Strcut는 바이트 별 다중 바이트 문자열을 가로 채립니다. 캐릭터의 절반을 잘리지 않도록 캐릭터 경계에주의를 기울이십시오.
인코딩 매개 변수를 식별하여 함수 동작이 일관되도록하십시오.
차단 된 결과의 인코딩 무결성은 MB_Check_Encoding 과 함께 확인할 수 있습니다.
MB_STRLEN 과 MB_SUBSTR을 결합하는 것이 문자 가로 채기가 필요할 때 더 안전합니다.
위의 기술을 통해 PHP에서 멀티 바이트 스트링 차단 중 오류를 인코딩하는 오류를 효과적으로 피할 수 있으며 텍스트 처리 및 사용자 경험의 정확도를 보장 할 수 있습니다.
<?php
function safe_mb_strcut(string $str, int $start, int $length, string $encoding = 'UTF-8'): string {
$substr = mb_strcut($str, $start, $length, $encoding);
if (mb_check_encoding($substr, $encoding)) {
return $substr;
}
while ($length > 0 && !mb_check_encoding($substr, $encoding)) {
$length--;
$substr = mb_strcut($str, $start, $length, $encoding);
}
return $substr;
}
$str = "이것은 테스트 문자열입니다,중국어를 포함합니다English";
$start = 0;
$length = 15;
echo safe_mb_strcut($str, $start, $length, 'UTF-8');
?>
PHP 문자열 처리에 대해 자세히 알아 보려면 다음 리소스에 액세스 할 수 있습니다.
$url = "https://gitbox.net/php/manual/zh/function.mb-strcut.php";