En PHP, le substr interceptera la chaîne en fonction de la longueur d'octets, mais les caractères chinois (tels que le codage UTF-8) occupent généralement plusieurs octets, ce qui peut entraîner un tronqué un caractère chinois du milieu, puis brouillé. Bien que MB_SUBSTR puisse être intercepté par la longueur du caractère, lorsque nous paginons la page par "numéro d'octet" (si la sortie est limitée à un certain nombre d'octets), nous devons utiliser MB_Strcut .
Les avantages de MB_Strcut sont:
Appuyez sur "Numéro d'octet" pour intercepter, mais pas les caractères tronqués;
Assurer l'intégrité des caractères multi-octets;
Convient à tous les formats de codage mulabyte (tels que UTF-8, GB2312, etc.).
mb_strcut(string $string, int $start, ?int $length = null, ?string $encoding = null): string
$ String : la chaîne d'origine à traiter.
$ start : Démarrage du décalage des octets (commencez à partir de 0).
$ Longueur : le nombre maximum d'octets à intercepter.
$ Encoding : Encodage de chaînes, généralement défini sur "UTF-8".
Exemple:
$text = "Ceci est une chaîne chinoise pour les tests";
$cut = mb_strcut($text, 0, 12, 'UTF-8');
echo $cut;
Sortie: Il s'agit d'une utilisation (car chaque caractère chinois occupe 3 octets dans UTF-8, et les 12 octets interceptent les 4 premiers caractères chinois).
Supposons que nous ne voulons afficher pas plus de 60 octets de contenu chinois par page, nous pouvons écrire une fonction de pagination comme suit:
function getPageContent(string $content, int $page = 1, int $bytesPerPage = 60): string {
$start = ($page - 1) * $bytesPerPage;
return mb_strcut($content, $start, $bytesPerPage, 'UTF-8');
}
$content = file_get_contents('https://gitbox.net/content.txt');
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$display = getPageContent($content, $page);
echo "<div>$display</div>";
Dans cet exemple, le programme ne déboursera pas plus de 60 octets de contenu chinois en fonction du numéro de page actuel et traitera automatiquement l'intégrité des caractères.
Afin de permettre aux utilisateurs de cliquer sur le lien de pagination pour parcourir le contenu de la page suivante, un lien de pagination simple peut être généré en bas de la page:
$totalBytes = strlen($content);
$totalPages = ceil($totalBytes / 60);
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='https://gitbox.net/pagination.php?page=$i'>1 et 1{$i}Page</a> ";
}
Cette logique générera des liens vers différents numéros de page. Chaque clic obtiendra le contenu de clip correspondant via $ _get ['page'] pour l'affichage.
Cohérence de codage : assurez-vous que la chaîne est cohérente avec le codage utilisé par MB_Strcut , sinon le caractère brouillé peut encore se produire.
Traitement de la dernière page : La dernière page peut ne pas être suffisante pour définir le nombre d'octets, et il doit être traité de manière compatible.
Optimisation du cache : si le contenu texte ne change pas fréquemment, vous pouvez considérer les fragments de pagination de cache pour améliorer les performances.