mb_strcut () 는 mb_substr () 와 다릅니다. 문자가 아닌 단위로 가로 채 웁니다. UTF-8 인코딩 된 문자열의 경우, 한자는 일반적으로 3 바이트가 필요합니다. 가운데의 바이트 위치에서 문자열을 자르면 불완전한 문자가 발생하여 출력에 차량 또는 불법 문자가 표시 될 수 있습니다.
예를 들어:
$str = '안녕하세요,세계';
$cut = mb_strcut($str, 0, 4, 'UTF-8');
echo $cut;
"당신" 이라는 단어가 UTF-8에서 3 바이트를 차지하기 때문에이 코드 출력의 결과는 차별화 될 수 있습니다. MB_STRCUT는 처음 4 바이트를 가로 채고 두 번째 문자 "Good" 의 일부를 자르면 차량을 유발합니다.
바이트 레벨 컨트롤이 특별히 필요하지 않은 경우, 바이트 길이가 아닌 문자 길이를 기준으로 작동하는 MB_SUBSTR ()을 사용하는 것이 좋습니다.
$str = '안녕하세요,세계';
$cut = mb_substr($str, 0, 2, 'UTF-8');
echo $cut; // 산출:안녕하세요
mb_strcut ()를 사용해야하는 경우 (예 : 스토리지 바이트 길이를 제한하기 위해) MB_STRLEN () 과 문자 인코딩을 결합하여보다 정확한 제어를 위해 결합해야합니다. 먼저 mb_substr ()를 사용하여 문자를 얻은 다음 strlen ()을 사용하여 바이트 길이 범위를 초과하는지 여부를 결정할 수 있습니다.
function safe_mb_strcut($string, $start, $length, $encoding = 'UTF-8') {
$substr = '';
$i = 0;
$byteCount = 0;
while ($i < mb_strlen($string, $encoding)) {
$char = mb_substr($string, $i, 1, $encoding);
$charLen = strlen($char);
if ($byteCount + $charLen > $length) {
break;
}
$substr .= $char;
$byteCount += $charLen;
$i++;
}
return $substr;
}
$str = '안녕하세요,세계';
$cut = safe_mb_strcut($str, 0, 6); // 바이트의 총 수는입니다6
echo $cut; // 산출:안녕하세요
MB_SERIES 함수를 사용할 때는 내부 문자 인코딩이 귀하가 기대하는 것 (예 : UTF-8)임을 설정하거나 확인하십시오. 다음 방법을 사용하여 전 세계적으로 설정할 수 있습니다.
mb_internal_encoding('UTF-8');
또한 다음과 같은 방법으로 확인하고 디버깅 할 수도 있습니다.
echo mb_detect_encoding($str); // 문자열 인코딩을 확인하십시오
설명에 URL이 포함 된 컨텐츠의 일부를 가로 채려면 위의 방법을 사용하여 URL을 파괴하지 않고 안전하게 가로 채기 위해 안전하게 가로 채울 수 있습니다. 예를 들어:
$str = '자세한 내용은 방문하십시오:https://gitbox.net/docs/php-guide.html';
$cut = safe_mb_strcut($str, 0, 40);
echo $cut;
출력이 URL 구조를 파괴하지 않거나 소셜 플랫폼 요약, 이메일 미리보기 및 기타 시나리오에 적합한 코드를 유발하지 않도록 할 수 있습니다.