現在の位置: ホーム> 最新記事一覧> MB_STRCUTを使用して、漢字の正確な傍受とページネーションを実現します

MB_STRCUTを使用して、漢字の正確な傍受とページネーションを実現します

gitbox 2025-05-29

1. SubstrまたはMB_Substrの代わりにMB_STRCUTを選択するのはなぜですか?

PHPでは、 substrはバイトの長さに応じて文字列を傍受しますが、漢字(UTF-8エンコーディングなど)は通常、複数のバイトを占有し、漢字が中央から切り捨てられ、その後ガーブルが発生する可能性があります。 MB_Substrは文字の長さで傍受することができますが、「バイト番号」(出力が特定のバイト数に制限されている場合)でページをページに塗ると、 MB_STRCUTを使用する必要があります。

MB_STRCUTの利点は次のとおりです。

  • 「バイト番号」を押して、文字を切り捨てるのではなく傍受します。

  • マルチバイト文字の完全性を確保します。

  • すべてのマルチバイトエンコード形式(UTF-8、GB2312など)に適しています。


2。MB_STRCUT関数の基本的な使用

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匹の漢字をインターセプトするため)。


3.MB_STRCUTを使用して、ページングロジックと組み合わせてコンテンツを表示します

1.ページネーションスニペ​​ットを取得します

ページごとに60バイト以下の中国のコンテンツを表示する必要があるとします。ページネーション関数を次のように記述できるとします。

 function getPageContent(string $content, int $page = 1, int $bytesPerPage = 60): string {
    $start = ($page - 1) * $bytesPerPage;
    return mb_strcut($content, $start, $bytesPerPage, 'UTF-8');
}

2。例の例:

 $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バイト以下に出力し、文字の整合性を自動的に処理します。


4。ページネーションリンクの実装

ユーザーがページングリンクをクリックして次のページのコンテンツを参照できるようにするために、ページの下部に簡単なページングリンクを生成できます。

 $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']を介して対応するクリップコンテンツが取得されます。


5。注意すべきこと

  1. エンコーディングの一貫性:文字列がMB_STRCUTが使用するエンコードと一致していることを確認してください。そうしないと、文字化けされた文字がまだ発生する可能性があります。

  2. 最後のページ処理:最後のページでは、バイト数を設定するのに十分ではない場合があり、互換性のある処理を行う必要があります。

  3. キャッシュの最適化:テキストコンテンツが頻繁に変更されない場合は、パフォーマンスを改善するためにキャッシュページングフラグメントを検討できます。