In PHP fängt Substr die Zeichenfolge nach der Bytelänge ab, aber chinesische Zeichen (z. B. UTF-8-Codierung) belegen normalerweise mehrere Bytes, was dazu führen kann, dass ein chinesischer Charakter aus der Mitte abgeschnitten und dann verstümmelt wird. Obwohl MB_SUBSTR durch die Zeichenlänge abgefangen werden kann, müssen wir, wenn wir die Seite nach "Byte -Nummer" pagieren (wenn die Ausgabe auf eine bestimmte Anzahl von Bytes beschränkt ist), mb_strcut verwenden.
Die Vorteile von mb_strcut sind:
Drücken Sie "Byte -Nummer", um abzufangen, aber keine Zeichen.
Stellen Sie die Integrität von Multi-Byte-Zeichen sicher;
Geeignet für alle Multibyte-Codierungsformate (wie UTF-8, GB2312 usw.).
mb_strcut(string $string, int $start, ?int $length = null, ?string $encoding = null): string
$ String : Die ursprüngliche Zeichenfolge, die verarbeitet werden soll.
$ start : Start Byte Offset (Start ab 0).
$ Länge : Die maximale Anzahl von Bytes, die abgefangen werden sollen.
$ codierung : String-Codierung, normalerweise auf "UTF-8" eingestellt.
Beispiel:
$text = "Dies ist eine chinesische Schnur zum Testen";
$cut = mb_strcut($text, 0, 12, 'UTF-8');
echo $cut;
Ausgabe: Dies ist eine Verwendung (da jedes chinesische Zeichen 3 Bytes in UTF-8 aufnimmt und die 12 Bytes die ersten 4 chinesischen Zeichen abfangen).
Angenommen, wir möchten nicht mehr als 60 Bytes chinesischer Inhalte pro Seite anzeigen. Wir können eine Paginierungsfunktion wie folgt schreiben:
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>";
In diesem Beispiel wird das Programm basierend auf der aktuellen Seitennummer nicht mehr als 60 Bytes chinesischer Inhalte ausgeben und die Integrität der Zeichen automatisch verarbeiten.
Um Benutzern zu ermöglichen, auf den Paging -Link zu klicken, um den Inhalt der nächsten Seite zu durchsuchen, kann unten auf der Seite ein einfacher Paging -Link generiert werden:
$totalBytes = strlen($content);
$totalPages = ceil($totalBytes / 60);
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='https://gitbox.net/pagination.php?page=$i'>1.{$i}Seite</a> ";
}
Diese Logik generiert Links zu verschiedenen Seitenzahlen. Jeder Klick erhält den entsprechenden Clip -Inhalt über $ _get ['Seite'] für die Anzeige.
Codierungskonsistenz : Stellen Sie sicher, dass die Zeichenfolge mit der von Mb_Strcut verwendeten Codierung übereinstimmt, da ansonsten das verstümmelte Zeichen immer noch auftreten kann.
Letzte Seitenverarbeitung : Die letzte Seite reicht möglicherweise nicht aus, um die Anzahl der Bytes festzulegen.
Cache -Optimierung : Wenn sich der Textinhalt nicht häufig ändert, können Sie Cache -Paging -Fragmente in Betracht ziehen, um die Leistung zu verbessern.