다국어 문자가 포함 된 대형 텍스트를 처리 할 때 PHP의 문자열 기능이 다중 바이트 인코딩을 지원하지 않으면 문자와 차량 코드가 잘릴 수 있습니다. 특히 큰 텍스트 조각을 표시 해야하는 시나리오에서 현악기를 안전하게 가로 채는 방법이 주요 문제가됩니다. 이 기사에서는 MB_Strcut 함수를 사용하여 문자열 페이지 매김 디스플레이를 구현하는 방법을 소개하여 문자 무결성을 보장 할뿐만 아니라 프론트 엔드 페이지 매김 디스플레이를 용이하게합니다.
substr () 는 PHP에서 일반적인 문자열 자르기 기능이지만 바이트로 처리됩니다. 텍스트에 중국어, 일본어 또는 한국어와 같은 다중 바이트 문자가 포함 된 경우, substr ()는 문자를 쉽게 자르고 코드가 갈 수 있습니다. 대조적으로, mb_strcut () 는 멀티 바이트 문자 세트 용으로 설계된 기능으로, 캐릭터가 잘리지 않도록 바이트에 의해 줄을 안전하게 가로 채 웁니다.
mb_strcut ( string $string , int $start [, int $length [, string $encoding ]] ) : string
$ String : 처리 할 문자열.
$ 시작 : 바이트 오프셋을 시작합니다.
$ 길이 : 가로 채는 바이트 수입니다.
$ 인코딩 : 일반적으로 UTF-8을 사용하여 문자 인코딩.
참고 : mb_strcut () 는 mb_substr () 와 다르며, 이는 문자가 아닌 바이트 의 위치를 기반으로 문자열을 가로 채지 만 문자 자체가 잘리지 않도록합니다.
1000 바이트와 같이 페이지 당 표시되는 최대 바이트 수를 설정합니다.
mb_strcut ()을 사용하여 해당 텍스트를 현재 페이지 번호와 차단하십시오.
페이징시, 문자의 총 길이를 페이지 당 바이트 수로 나누어 총 페이지 수를 결정해야합니다.
function paginateText($text, $page = 1, $bytesPerPage = 1000, $encoding = 'UTF-8') {
$totalBytes = strlen($text);
$start = ($page - 1) * $bytesPerPage;
// 줄을 단단히 차단합니다,캐릭터의 잘림을 피하십시오
$paginated = mb_strcut($text, $start, $bytesPerPage, $encoding);
// 페이징 데이터를 구성하십시오
$totalPages = ceil($totalBytes / $bytesPerPage);
return [
'content' => $paginated,
'page' => $page,
'total_pages' => $totalPages
];
}
데이터베이스에 긴 기사가 저장되어 있고 사용자가 프론트 엔드에서 페이지별로 페이지별로 읽기를 원한다고 가정 해 봅시다.
$fullText = file_get_contents('https://gitbox.net/static/long_article.txt');
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$result = paginateText($fullText, $page);
// 현재 페이지 컨텐츠를 출력하십시오
echo nl2br(htmlspecialchars($result['content']));
// 페이지 매김 내비게이션
for ($i = 1; $i <= $result['total_pages']; $i++) {
echo "<a href=\"?page=$i\">1. $i 페이지</a> ";
}
mb_strcut ()를 사용하는 경우 텍스트 인코딩이 함수의 인코딩 매개 변수와 일치하는지 확인하십시오.
바이트 대신 문자 수를 기준으로 페이징을하려면 mb_substr ()를 사용해야합니다.
실제로 사용하면 캐시 전략으로 성능을 최적화해야 할 수도 있습니다.
문자열 페이지 매김 디스플레이에 mb_strcut ()를 사용하는 것은 큰 텍스트 컨텐츠를 처리 할 때 성능을 고려하고 보안을 인코딩하는 방법입니다. 이를 통해 잘린 캐릭터로 인한 문제를 효과적으로 방지하여 다국어 웹 사이트에 더 나은 사용자 경험을 제공 할 수 있습니다. 이 기사가 프로젝트에서 대규모 텍스트 페이징 문제를보다 효율적으로 다루는 데 도움이되기를 바랍니다.