>  기사  >  백엔드 개발  >  PHP는 UTF8 또는 GBK로 인코딩된 중국어 및 영어 문자열을 가로챕니다.

PHP는 UTF8 또는 GBK로 인코딩된 중국어 및 영어 문자열을 가로챕니다.

WBOY
WBOY원래의
2016-07-25 08:53:51892검색
  1. //字符串截取

  2. $a = "s@@你好";
  3. var_dump(strlen_weibo($a,'utf-8'));
  4. 结果输出为8,其中字母s计数为1,全角@计数为2,半角@计数为1,两个中文计数为4。源码如下:

  5. //截取字符串的函数代码

  6. function strlen_weibo($string, $charset='utf-8')
  7. {
  8. $n = $count = 0;
  9. $length = strlen($string);
  10. if (strtolower($charset) == 'utf-8')
  11. {
  12. while ($n < $length)
  13. {
  14. $currentByte = ord($string[$n]);
  15. if ($currentByte == 9 ||
  16. $currentByte == 10 ||
  17. (32 <= $currentByte && $currentByte <= 126)) // bbs.it-home.org
  18. {
  19. $n ;
  20. $count ;
  21. } elseif (194 <= $currentByte && $currentByte <= 223)
  22. {
  23. $n = 2;
  24. $count = 2;
  25. } elseif (224 <= $currentByte && $currentByte <= 239)
  26. {
  27. $n = 3;
  28. $count = 2;
  29. } elseif (240 <= $currentByte && $currentByte <= 247)
  30. {
  31. $n = 4;
  32. $count = 2;
  33. } elseif (248 <= $currentByte && $currentByte <= 251)
  34. {
  35. $n = 5;
  36. $count = 2;
  37. } elseif ($currentByte == 252 || $currentByte == 253)
  38. {
  39. $n = 6;
  40. $count = 2;
  41. } else
  42. {
  43. $n ;
  44. $count ;
  45. }
  46. if ($count >= $length)
  47. {
  48. break;
  49. }
  50. }
  51. return $count;
  52. } else
  53. {
  54. for ($i = 0; $i < $length; $i )
  55. {
  56. if (ord($string[$i]) > 127)
  57. {
  58. $i ;
  59. $count ;
  60. }
  61. $count ;
  62. }
  63. return $count;
  64. }
  65. }

复制代码


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