>백엔드 개발 >PHP 튜토리얼 >글자 깨짐 없는 중국어 차단(2가지 방법)

글자 깨짐 없는 중국어 차단(2가지 방법)

WBOY
WBOY원래의
2016-07-25 09:01:161076검색
中文截取无乱码(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. ?>
复制代码


성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.