PHPでは、 substrはバイトの長さに応じて文字列を傍受しますが、漢字(UTF-8エンコーディングなど)は通常、複数のバイトを占有し、漢字が中央から切り捨てられ、その後ガーブルが発生する可能性があります。 MB_Substrは文字の長さで傍受することができますが、「バイト番号」(出力が特定のバイト数に制限されている場合)でページをページに塗ると、 MB_STRCUTを使用する必要があります。
MB_STRCUTの利点は次のとおりです。
「バイト番号」を押して、文字を切り捨てるのではなく傍受します。
マルチバイト文字の完全性を確保します。
すべてのマルチバイトエンコード形式(UTF-8、GB2312など)に適しています。
mb_strcut(string $string, int $start, ?int $length = null, ?string $encoding = null): string
$文字列:処理する元の文字列。
$ start :byte offsetを開始します(0から開始)。
$の長さ:傍受する最大バイト数。
$エンコード:文字列エンコード、通常は「UTF-8」に設定されています。
例:
$text = "これは、テスト用の中国語の文字列です";
$cut = mb_strcut($text, 0, 12, 'UTF-8');
echo $cut;
出力:これは使用です(各漢字はUTF-8で3バイトを占有し、12バイトが最初の4匹の漢字をインターセプトするため)。
ページごとに60バイト以下の中国のコンテンツを表示する必要があるとします。ページネーション関数を次のように記述できるとします。
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>";
この例では、プログラムは現在のページ番号に基づいて中国のコンテンツを60バイト以下に出力し、文字の整合性を自動的に処理します。
ユーザーがページングリンクをクリックして次のページのコンテンツを参照できるようにするために、ページの下部に簡単なページングリンクを生成できます。
$totalBytes = strlen($content);
$totalPages = ceil($totalBytes / 60);
for ($i = 1; $i <= $totalPages; $i++) {
echo "<a href='https://gitbox.net/pagination.php?page=$i'>第{$i}ページ</a> ";
}
このロジックは、異なるページ番号へのリンクを生成します。クリックするたびに、表示される$ _get ['page']を介して対応するクリップコンテンツが取得されます。
エンコーディングの一貫性:文字列がMB_STRCUTが使用するエンコードと一致していることを確認してください。そうしないと、文字化けされた文字がまだ発生する可能性があります。
最後のページ処理:最後のページでは、バイト数を設定するのに十分ではない場合があり、互換性のある処理を行う必要があります。
キャッシュの最適化:テキストコンテンツが頻繁に変更されない場合は、パフォーマンスを改善するためにキャッシュページングフラグメントを検討できます。