Lorsque vous traitez un grand texte contenant des caractères multilingues, si la fonction de chaîne de PHP ne prend pas en charge le codage multi-octets, il est facile de provoquer une troncature des caractères et du code brouillé. Surtout dans les scénarios où un grand morceau de texte doit être affiché, comment intercepter en toute sécurité les chaînes devient un problème clé. Cet article présentera comment utiliser la fonction MB_Strcut pour implémenter l'affichage de pagination de chaîne, qui garantit non seulement l'intégrité des caractères, mais facilite également l'affichage de pagination frontale.
substr () est une fonction de troncature de chaîne commune dans PHP, mais elle est traitée par des octets. Si le texte contient des caractères multi-octets tels que chinois, japonais ou coréen, substr () peut facilement tronquer des caractères, entraînant un code brouillé. En revanche, MB_Strcut () est une fonction conçue pour les jeux de caractères multi -yte, qui intercepte en toute sécurité les chaînes par octets tout en empêchant les caractères d'être tronqués.
mb_strcut ( string $string , int $start [, int $length [, string $encoding ]] ) : string
$ String : la chaîne à traiter.
$ start : Démarrage du décalage des octets.
$ Longueur : le nombre d'octets interceptés.
$ Encodage : codage des caractères, généralement en utilisant UTF-8 .
Remarque: mb_strcut () est différent de mb_substr () , qui intercepte les chaînes en fonction de la position des octets plutôt que des caractères, mais garantira que le caractère lui-même n'est pas tronqué.
Définit le nombre maximum d'octets affichés par page, tels que 1000 octets.
Utilisez MB_strcut () pour intercepter le texte correspondant avec le numéro de page actuel.
Lors de la pagination, vous devez diviser la longueur totale des caractères par le nombre d'octets par page pour déterminer le nombre total de pages.
function paginateText($text, $page = 1, $bytesPerPage = 1000, $encoding = 'UTF-8') {
$totalBytes = strlen($text);
$start = ($page - 1) * $bytesPerPage;
// Intercepter en toute sécurité les chaînes,Évitez la troncature des caractères
$paginated = mb_strcut($text, $start, $bytesPerPage, $encoding);
// Construire des données de pagination
$totalPages = ceil($totalBytes / $bytesPerPage);
return [
'content' => $paginated,
'page' => $page,
'total_pages' => $totalPages
];
}
Supposons que vous ayez un long article stocké dans la base de données et que vous souhaitez que l'utilisateur lise la page par page dans l'avant:
$fullText = file_get_contents('https://gitbox.net/static/long_article.txt');
$page = isset($_GET['page']) ? (int)$_GET['page'] : 1;
$result = paginateText($fullText, $page);
// Sortir le contenu de la page actuelle
echo nl2br(htmlspecialchars($result['content']));
// Navigation de pagination
for ($i = 1; $i <= $result['total_pages']; $i++) {
echo "<a href=\"?page=$i\">1 et 1 $i Page</a> ";
}
Lorsque vous utilisez MB_Strcut () , assurez-vous que le codage du texte est cohérent avec les paramètres de codage de la fonction.
Si vous souhaitez paginer en fonction du nombre de caractères au lieu d'octets, vous devez utiliser mb_substr () .
Dans une utilisation réelle, il peut également être nécessaire d'optimiser les performances avec des stratégies de cache, en particulier lorsque le contenu texte est grand.
L'utilisation de MB_strcut () pour l'affichage de pagination de chaîne est un moyen de prendre en compte les performances et le codage de la sécurité lors du traitement du contenu texte important. Grâce à lui, il peut prévenir efficacement les problèmes brouillés causés par des caractères tronqués, apportant une meilleure expérience utilisateur aux sites Web multilingues. J'espère que cet article vous aidera à faire face aux grands problèmes de pagination de texte plus efficacement dans votre projet.