当前位置:Gxlcms > PHP教程 > 中文截取无乱码(2种方法)

中文截取无乱码(2种方法)

时间:2021-07-01 10:21:17 帮助过:22人阅读

中文截取无乱码(2种方法)
  1. //$str 待截取的字符串
  2. //$len 截取的字符个数
  3. //$chars 已经截取的字符数
  4. //$res 保存的字符串
  5. //$chars 保存已经截取的字符串个数
  6. //$offset 截取的偏移量
  7. //$length 字符串的字节数
  8. //若$len>$str的字符个数,造成无谓的while循环,($offset<$length限定)
  9. function utf8sub($str,$len){
  10. if($len<=0){
  11. return ;
  12. }
  13. $res="";
  14. $offset=0;
  15. $chars=0;
  16. $length=strlen($str);
  17. while($chars<$len && $offset<$length){
  18. $hign=decbin(ord(substr($str,$offset,1)));
  19. if(strlen($hign)<8){
  20. $count=1;
  21. }elseif(substr($hign,0,3)=="110"){
  22. $count=2;
  23. }elseif(substr($hign,0,4)=="1110"){
  24. $count=3;
  25. }elseif(substr($hign,0,5)=="11110"){
  26. $count=4;
  27. }elseif(substr($hign,0,6)=="111110"){
  28. $count=5;
  29. }elseif(substr($hign,0,7)=="1111110"){
  30. $count=6;
  31. }
  32. $res.=substr($str,$offset,$count);
  33. $offset+=$count;
  34. $chars+=1;
  35. }
  36. return $res;
  37. }
  38. function utf8sub1($str,$len){
  39. $chars=0;
  40. $res="";
  41. $offset=0;
  42. $length=strlen($str);
  43. while($chars<$len && $offset<$length){
  44. $hign=decbin(ord(substr($str,$offset,1)));
  45. if(strlen($hign)<8){
  46. $count=1;
  47. }elseif($hign & "11100000"=="11000000"){
  48. $count=2;
  49. }elseif($hign & "11110000"=="11100000"){
  50. $count=3;
  51. }elseif($hign & "11111000"=="11110000"){
  52. $count=4;
  53. }elseif($hign & "11111100"=="11111000"){
  54. $count=5;
  55. }elseif($hign & "11111110"=="11111100"){
  56. $count=6;
  57. }
  58. $res.=substr($str,$offset,$count);
  59. $chars++;
  60. $offset+=$count;
  61. }
  62. return $res;
  63. }
  64. $a="中华ah人民hdj";
  65. echo utf8sub($a,5);
  66. ?>

人气教程排行