当前位置:Gxlcms > PHP教程 > PHP操作字符串详解

PHP操作字符串详解

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

PHP中有八大数据类型,而字符串也是其中的一种,而且还是最常见的最常用的一种,通常我们都需要对PHP字符串进行一些操作,今天我们就一起来看看本篇文章是如何对PHP字符串进行截取的吧!

1.mb_strimwidth字符串截取函数使用 & UTF8编码认识

  1. <?php
  2. header("Content-type:text/html;charset=utf-8");
  3. echo mb_strwidth("6", "UTF-8") . '<br />';//1
  4. echo mb_strwidth("A", "UTF-8") . '<br />';//1
  5. echo mb_strwidth("a", "UTF-8") . '<br />';//1
  6. echo mb_strwidth("月", "UTF-8") . '<br />';//2
  7. echo mb_strwidth("6月9日OUR系统升级通知", "UTF-8") . '<br />';//21
  8. echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '...') .'<br />';//6月9��...
  9. echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '...', "UTF-8") .'<br />';//6月9日O...
  10. echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '......', "UTF-8") .'<br />';//6月9......
  11. echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '', "UTF-8") .'<br />';//6月9日OUR
  12. ?>

附手册介绍:

mb_strimwidth
(PHP 4 >= 4.0.6, PHP 5)

mb_strimwidth — Get truncated string with specified width

Description
string mb_strimwidth ( stringstr,intstr,intstart , intwidth[,stringwidth[,stringtrimmarker [, string$encoding ]] )
Truncates stringstr to specified width.

本次经验

1. 这个函数需要系统加载mb(multi-byte)扩展

2. $trimmarker参数会影响结果 ,其长度也被计入结果中

3. 此函数按等宽字体计算字符串占用宽度。汉字占两个宽度,其余占一个宽度。

4 .传入编码参数是好的

2.

  1. mb_substr($string,'GBK'),
  2. mb_strlen($string,'GBK'),
  3. mb_strwidth($string,'GBK')
  4. 适用于GBK

3.

  1. mb_substr($string,'GBK'),mb_strlen($string,'GBK'),mb_strwidth($string,'GBK')适用于GBK
  1. $test = "123中文测试";
  2. //字符数
  3. $mb_strlen($test, 'GBK');//7
  4. $mb_strlen($test, 'UTF-8');//7
  5. $mb_strlen($test);//11
  6. //字节数
  7. $mb_strwidth($test, 'GBK');//11
  8. $mb_strwidth($test, 'UTF-8');//4
  9. $mb_strwidth($test);//11
  10. mb_substr($test, 0, 4);//乱码
  11. mb_substr($test, 0, 5);//123中
  12. //字符数
  13. mb_substr($test, 0, 4, 'GBK');//123中
  14. mb_substr($test, 0, 5, 'GBK');//123中文
  15. mb_substr($test, 0, 4, 'gb2312');//123中
  16. mb_substr($test, 0, 4, 'UTF-8');//乱码
  17. //截取中文英文字符串:
  18. //方法1:
  19. function str_cut($str, $len)
  20. {
  21. $str = iconv($str, 'GBK', 'GBK/TRANLIT');
  22. if (mb_strwidth($str) < $len) {
  23. return $str;
  24. }
  25. for ($i = 0; $i < mb_strlen($str); $i++) {
  26. $tmp = mb_substr($str, $i, 1, 'GBK');
  27. if (mb_strwidth($return . $tmp) > $len) {
  28. break;
  29. }
  30. $return .= $tmp;
  31. }
  32. return $return;
  33. }
  34. // 方法2:
  35. function str_cut($str, $len)
  36. {
  37. $str = iconv($str, 'GBK', 'GBK/TRANLIT');
  38. if (mb_strwidth($str) < $len) {
  39. return $str;
  40. }
  41. for ($i = 0; $i < mb_strlen($str); $i++) {
  42. $return = mb_substr($str, 0, $i, 'GBK');
  43. if (mb_strwidth($return) > $len) {
  44. $return = mb_substr($str, 0, $i - 1, 'GBK');
  45. break;
  46. }
  47. }
  48. return $return;
  49. }
  50. /*
  51. 判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据 中文的范围来判断
  52. 编码范围1. GBK (GB2312/GB18030)
  53. x00-xff GBK双字节编码范围
  54. x20-x7f ASCII
  55. xa1-xff 中文
  56. x80-xff 中文
  57. 2. UTF-8 (Unicode)
  58. u4e00-u9fa5 (中文)
  59. x3130-x318F (韩文
  60. xAC00-xD7A3 (韩文)
  61. u0800-u4e00 (日文)
  62. ps: 韩文是大于[u9fa5]的字符
  63. */
  64. //二、代码例子
  65. //截取字符串字串-GBK (PHP)
  66. function gb_substr($str, $len)
  67. {
  68. $count = 0;
  69. for ($i = 0; $i < strlen($str); $i++) {
  70. if ($count == $len) break;
  71. if (preg_match("/[x80-xff]/", substr($str, $i, 1))) ++$i;
  72. ++$count;
  73. }
  74. return substr($str, 0, $i);
  75. }
  76. function substrGb($str, $len)
  77. {
  78. $ret = '';
  79. $i = 0;
  80. while ($i < $len) {
  81. $ch = substr($str, $i, 1);
  82. if (ord($ch) > 0x80) {
  83. $i++;
  84. }
  85. $i++;
  86. }
  87. $ret = substr($str, 0, $i);
  88. return $ret;
  89. }
  90. //截取字符串-UTF8(PHP)
  91. function utf8_substr($str, $position, $length)
  92. {
  93. $start_position = strlen($str);
  94. $start_byte = 0;
  95. $end_position = strlen($str);
  96. $count = 0;
  97. for ($i = 0; $i < strlen($str); $i++) {
  98. if ($count >= $position && $start_position > $i) {
  99. $start_position = $i;
  100. $start_byte = $count;
  101. }
  102. if (($count - $start_byte) >= $length) {
  103. $end_position = $i;
  104. break;
  105. }
  106. $value = ord($str[$i]);
  107. if ($value > 127) {
  108. $count++;
  109. if ($value >= 192 && $value <= 223) $i++;
  110. elseif ($value >= 224 && $value <= 239) $i = $i + 2;
  111. elseif ($value >= 240 && $value <= 247) $i = $i + 3;
  112. else die('Not a UTF-8 compatible string');
  113. }
  114. $count++;
  115. }
  116. return (substr($str, $start_position, $end_position - $start_position));
  117. }
  118. // int ord ( string string )------返回字符的ASCII码
  119. // string chr ( int ascii )-----根据字符的ASCII码返回相应的字符

对PHP字符串操作的内容就是这么多了,大家可以测试测试了解一下!

相关推荐:

php字符串用法详解

以上就是PHP操作字符串详解的详细内容,更多请关注Gxl网其它相关文章!

人气教程排行