: 문자열을 가로 채기 위해 mb_strcut를 사용한 후, 갈색 코드가 나타나거나 가로 채기 된 문자열의 문자가 불완전합니다.
이유 : MB_Strcut는 문자가 아닌 바이트별로 문자열을 가로 채는 것입니다. 차단 된 위치가 멀티 바이트 문자의 중간에 정확히 떨어지면 캐릭터가 깨져서 차량 코드를 표시합니다.
<?php
$str = "안녕하세요,세계";
echo mb_strcut($str, 0, 5, "UTF-8");
// 출력이 차단 될 수 있습니다,왜냐하면“너”예3바이트,“좋은”예3바이트,인터셉트5바이트会截断“좋은”성격
?>
오류 현상 : 가로 채기 결과가 잘못되거나 출력이 비정상적입니다.
원인 : 올바른 인코딩이 명시 적으로 지정되지 않은 경우 MB_STRCUT는 내부 기본 인코딩 (일반적으로 MB_Internal_Encoding () 의 값)을 사용하여 문자열의 실제 인코딩과 일치하지 않을 수 있습니다.
<?php
$str = "こんにちは";
echo mb_strcut($str, 0, 4); // 인코딩이 지정되지 않았습니다,默认可能不예 UTF-8,결과는 비정상적입니다
?>
오류 현상 : 기능 오류 또는 동작 이상.
원인 : MB_Strcut 의 첫 두 매개 변수 (문자열, 시작 위치)와 세 번째 매개 변수 (인터셉트 길이)는 정수로 변환 될 수있는 정수 또는 값이어야하며 시작 위치와 길이는 음수 일 수 없습니다 (길이는 생략 될 수 있음). 비 통신 또는 음수 값을 통과하면 오류가 발생합니다.
<?php
$str = "Hello World";
echo mb_strcut($str, "a", 5); // 시작 위치는 정수 여야합니다,传入성격符串会出错
?>
MB_STRCUT는 바이트에 의해 가로 채기 때문에 인터셉트 길이로 인해 멀티 바이트 문자가 잘리지 않도록하십시오. 일반적인 방법은 먼저 멀티 바이트 문자 길이를 계산 한 다음 필요에 따라 해당 바이트 길이를 가로 채거나 MB_SUBSTR을 사용하여 대신 문자별로 가로 채는 것입니다.
<?php
$str = "안녕하세요,세계";
// 사용 mb_substr 按성격符인터셉트,避免截断성격符
echo mb_substr($str, 0, 2, "UTF-8"); // 산출:안녕하세요
?>
MB_Strcut를 사용해야하는 경우 가로 채는 바이트 수가 전체 문자의 경계인지 확인하십시오.
<?php
$str = "안녕하세요,세계";
$length = 6; // 3바이트 * 2个성격符
echo mb_strcut($str, 0, $length, "UTF-8"); // 산출:안녕하세요
?>
기본 인코딩 불일치로 인한 문제를 피하려면 MB_Strcut (일반적으로 UTF-8”을 호출 할 때 문자 인코딩 매개 변수를 항상 지정해야합니다.
<?php
$str = "こんにちは";
echo mb_strcut($str, 0, 6, "UTF-8");
?>
mb_strcut를 사용하기 전에 들어오는 시작 위치와 길이 매개 변수가 음성 정수인지 확인하십시오. 오류를 피하기 위해 intval () 또는 filter_var () 와 같은 함수를 통해 변환 및 확인을 입력 할 수 있습니다.
<?php
$start = intval($_GET['start'] ?? 0);
$length = intval($_GET['length'] ?? 10);
$str = "Hello, 세계";
echo mb_strcut($str, $start, $length, "UTF-8");
?>
<?php
function safe_mb_strcut(string $string, int $start, int $length = null, string $encoding = 'UTF-8'): string {
// 시작 위치와 길이가 음이 아닌 정수인지 확인하십시오.
$start = max(0, $start);
if ($length !== null) {
$length = max(0, $length);
}
// 获取성격符串바이트长度
$byteLength = strlen(mb_convert_encoding($string, 'UTF-8'));
if ($start > $byteLength) {
return '';
}
if ($length === null) {
$length = $byteLength - $start;
} else if ($start + $length > $byteLength) {
$length = $byteLength - $start;
}
return mb_strcut($string, $start, $length, $encoding);
}
// 사용示例
$str = "안녕하세요,GitBox사용자!";
echo safe_mb_strcut($str, 0, 9, "UTF-8"); // 인터셉트前3个汉성격
?>
위의 분석 및 예를 통해 MB_Strcut를 올바르게 사용하는 열쇠는 다음과 같습니다.
문자 인코딩을 명시 적으로 지정합니다.
매개 변수 유형이 정확하고 유효한지 확인하십시오.
바이트는 다중 바이트 문자에 의해 잘리지 않거나 문자로 가로 채지 않고 mb_substr을 사용하지 않습니다.
이러한 기술을 마스터 한 후 MB_Strcut은 멀티 바이트 문자열을 처리 할 때 일반적인 실수를 피할 때 더 신뢰할 수 있습니다.