在UTF-8 chracter中将长字符串剪切为中等显示字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在UTF-8 chracter中将长字符串剪切为中等显示字符串相关的知识,希望对你有一定的参考价值。

在UTF-8的編碼下縮減字串並避免中文字串最後一個字變亂碼
  1. //擷取字串前幾個字並避免截掉半個中文字,$strlen要擷取的字串長度(以英文字母數計算,中文字需算二個字數)
  2. //此處直接傳入從資料庫讀出之UTF-8編碼字串
  3. function CuttingStr($str, $strlen) {
  4. //把' '先轉成空白
  5. $str = str_replace(' ', ' ', $str);
  6.  
  7. $output_str_len = 0; //累計要輸出的擷取字串長度
  8. $output_str = ''; //要輸出的擷取字串
  9.  
  10. //逐一讀出原始字串每一個字元
  11. for($i=0; $i<strlen($str);$i++){
  12. //擷取字數已達到要擷取的字串長度,跳出回圈
  13. if($output_str_len >= $strlen){
  14. break;
  15. }
  16.  
  17. //取得目前字元的ASCII碼
  18. $str_bit = ord(substr($str, $i, 1));
  19.  
  20. if($str_bit < 128) {
  21. //ASCII碼小於 128 為英文或數字字符
  22. $output_str_len += 1; //累計要輸出的擷取字串長度,英文字母算一個字數
  23. $output_str .= substr($str, $i, 1); //要輸出的擷取字串
  24.  
  25. }elseif($str_bit > 191 && $str_bit < 224) {
  26. //第一字節為落於192~223的utf8的中文字(表示該中文為由2個字節所組成utf8中文字)
  27. $output_str_len += 2; //累計要輸出的擷取字串長度,中文字需算二個字數
  28. $output_str .= substr($str, $i, 2); //要輸出的擷取字串
  29. $i++;
  30.  
  31. }elseif($str_bit > 223 && $str_bit < 240) {
  32. //第一字節為落於223~239的utf8的中文字(表示該中文為由3個字節所組成的utf8中文字)
  33. $output_str_len += 2; //累計要輸出的擷取字串長度,中文字需算二個字數
  34. $output_str .= substr($str, $i, 3); //要輸出的擷取字串
  35. $i+=2;
  36.  
  37. }elseif($str_bit > 239 && $str_bit < 248) {
  38. //第一字節為落於240~247的utf8的中文字(表示該中文為由4個字節所組成的utf8中文字)
  39. $output_str_len += 2; //累計要輸出的擷取字串長度,中文字需算二個字數
  40. $output_str .= substr($str, $i, 4); //要輸出的擷取字串
  41. $i+=3;
  42. }
  43. }
  44.  
  45. //要輸出的擷取字串為空白時,輸出原始字串
  46. return ($output_str == '') ? $str : $output_str;
  47. }

以上是关于在UTF-8 chracter中将长字符串剪切为中等显示字符串的主要内容,如果未能解决你的问题,请参考以下文章

如何让 git log 剪切长评论?

使用 NetSuite 高级 pdf 打印时,长文本被剪切

Xcode:如何在 xcode 编辑器中将长字符串包装到下一行

在python中将长数字格式化为字符串

在c中将长动态字符串拆分为字符串数组

如何在 C# 中将数据从字符串转换为长整数