首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

PHP 多字節安全截取:mb_substr 替代 chr/ord 解決中文亂碼

     編輯:PHP 綜合知識

錯誤示範

<?php
$str = "怎麼將新聞的很長的標題只顯示前面一些字";
$lenth = 19;
echo strlen($str) <= $lenth ? $str : substr($str,0,$lenth).chr(0)."....";
// chr(0) 僅阻斷單字節,UTF-8 中文 3 字節會被截斷產生亂碼

正確做法:mb_substr / mb_strimwidth

<?php
mb_internal_encoding('UTF-8');

$str = "怎麼將新聞的很長的標題只顯示前面一些字";
$len = 19;

// 方案一:mb_substr
echo mb_strlen($str) > $len ? mb_substr($str,0,$len).'...' : $str;

// 方案二:mb_strimwidth(自動補尾綴,寬度按字符寬度計算)
echo mb_strimwidth($str, 0, $len, '...', 'UTF-8');

手寫兼容函數(無 mbstring 環境)

<?php
function utf8_substr($str, $len) {
    $r = '';
    for ($i=0, $count=0; $i

現代最佳實踐

  • 生產環境**強制開啟 mbstring 擴展**(PHP 內建)。
  • 統一使用 mb_substr()、mb_strlen()、mb_strimwidth()。
  • 框架層封裝 Str::limit($str, $len, '...')(Laravel)或 StringHelper::truncate()(Yii)。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved