當前位置: 首頁> 最新文章列表> 如何使用mb_strcut 截取多字節字符串

如何使用mb_strcut 截取多字節字符串

gitbox 2025-05-31

在PHP中處理多字節字符(如中文、日文、韓文等)時, mb_strcut是一個非常實用的函數。與substr不同,它能夠保證不會將多字節字符截斷,從而避免亂碼問題。本文將詳細講解如何正確使用mb_strcut來截取多字節字符串,並結合實際案例進行演示。

一、mb_strcut 與mb_substr 的區別

在開始之前,先簡單了解一下mb_strcutmb_substr的區別:

  • mb_substr是按字符數進行截取;

  • mb_strcut是按字節長度進行截取,但會保證不截斷字符(即不會只截取一個漢字的一部分);

  • 兩者都支持指定字符編碼。

這意味著, mb_strcut更適合在字節級別處理文本,如限制數據庫字段長度、生成摘要等場景。

二、mb_strcut 函數的語法

string mb_strcut(string $string, int $start, int $length = null, string $encoding = null)
  • $string :要處理的字符串;

  • $start :起始位置(按字節計算);

  • $length :要截取的字節數;

  • $encoding :字符編碼(如UTF-8、GBK 等),可選。

三、使用示例

示例1:基本用法

<?php
$str = "你好,世界!";
$result = mb_strcut($str, 0, 6, "UTF-8");
echo $result; // 輸出:你好
?>

解釋:每個漢字在UTF-8 編碼下佔用3 個字節,因此6 個字節正好是兩個漢字。

示例2:防止亂碼

如果使用substr截取中文,容易出現亂碼:

 <?php
$str = "你好,世界!";
echo substr($str, 0, 5); // 可能輸出乱码
?>

改為mb_strcut後可避免這個問題:

 <?php
$str = "你好,世界!";
echo mb_strcut($str, 0, 5, "UTF-8"); // 輸出:你
?>

示例3:結合數據庫或頁面展示

當你需要截取文章摘要時,可以使用如下方式:

 <?php
$content = "歡迎訪問我們的官網:https://gitbox.net/blog/php-mb_strcut-use";
$summary = mb_strcut($content, 0, 60, "UTF-8");
echo $summary . "...";
?>

這將在網頁中安全地顯示出固定長度的摘要而不會亂碼。

四、如何確定合適的截取長度?

因為多字節字符在不同編碼下佔用字節長度不同,推薦使用mb_strlen配合mb_strcut來進行動態處理:

 <?php
function safe_cut($str, $maxBytes, $encoding = "UTF-8") {
    return mb_strcut($str, 0, $maxBytes, $encoding);
}
?>

這樣你可以靈活設置字節限​​制,比如:

 echo safe_cut("這是一個PHP字符串處理的例子", 9); // 輸出:這是

五、注意事項

  • mb_strcut是字節級操作,因此特別適合處理存儲或傳輸數據時的精確長度控制;

  • 它不會對字符串進行HTML 編碼或過濾,需結合htmlspecialchars等函數使用;

  • 確保服務器啟用了mbstring擴展,可通過phpinfo()查看。

六、結語

mb_strcut是PHP中處理多字節字符串的重要工具,尤其適用於需要精確控製字節長度的場景。通過合理設置起始位置和長度,並結合編碼設置,可以輕鬆避免亂碼問題,提升程序的健壯性。在開發中充分利用mb_strcut ,能夠讓你在處理多語言字符串時更加游刃有餘。