时间:2021-07-01 10:21:17 帮助过:3人阅读
1.mb_strimwidth字符串截取函数使用 & UTF8编码认识
- <?php
- header("Content-type:text/html;charset=utf-8");
- echo mb_strwidth("6", "UTF-8") . '<br />';//1
- echo mb_strwidth("A", "UTF-8") . '<br />';//1
- echo mb_strwidth("a", "UTF-8") . '<br />';//1
- echo mb_strwidth("月", "UTF-8") . '<br />';//2
- echo mb_strwidth("6月9日OUR系统升级通知", "UTF-8") . '<br />';//21
- echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '...') .'<br />';//6月9��...
- echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '...', "UTF-8") .'<br />';//6月9日O...
- echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '......', "UTF-8") .'<br />';//6月9......
- echo mb_strimwidth("6月9日OUR系统升级通知", 0, 10, '', "UTF-8") .'<br />';//6月9日OUR
- ?>
附手册介绍:
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 .传入编码参数是好的
- mb_substr($string,'GBK'),
- mb_strlen($string,'GBK'),
- mb_strwidth($string,'GBK')
- 适用于GBK
- mb_substr($string,'GBK'),mb_strlen($string,'GBK'),mb_strwidth($string,'GBK')适用于GBK
- $test = "123中文测试";
- //字符数
- $mb_strlen($test, 'GBK');//7
- $mb_strlen($test, 'UTF-8');//7
- $mb_strlen($test);//11
- //字节数
- $mb_strwidth($test, 'GBK');//11
- $mb_strwidth($test, 'UTF-8');//4
- $mb_strwidth($test);//11
- mb_substr($test, 0, 4);//乱码
- mb_substr($test, 0, 5);//123中
- //字符数
- mb_substr($test, 0, 4, 'GBK');//123中
- mb_substr($test, 0, 5, 'GBK');//123中文
- mb_substr($test, 0, 4, 'gb2312');//123中
- mb_substr($test, 0, 4, 'UTF-8');//乱码
- //截取中文英文字符串:
- //方法1:
- function str_cut($str, $len)
- {
- $str = iconv($str, 'GBK', 'GBK/TRANLIT');
- if (mb_strwidth($str) < $len) {
- return $str;
- }
- for ($i = 0; $i < mb_strlen($str); $i++) {
- $tmp = mb_substr($str, $i, 1, 'GBK');
- if (mb_strwidth($return . $tmp) > $len) {
- break;
- }
- $return .= $tmp;
- }
- return $return;
- }
- // 方法2:
- function str_cut($str, $len)
- {
- $str = iconv($str, 'GBK', 'GBK/TRANLIT');
- if (mb_strwidth($str) < $len) {
- return $str;
- }
- for ($i = 0; $i < mb_strlen($str); $i++) {
- $return = mb_substr($str, 0, $i, 'GBK');
- if (mb_strwidth($return) > $len) {
- $return = mb_substr($str, 0, $i - 1, 'GBK');
- break;
- }
- }
- return $return;
- }
- /*
- 判断中文和编码有关 gbk是双字节,utf8是三字节,可以根据 中文的范围来判断
- 编码范围1. GBK (GB2312/GB18030)
- x00-xff GBK双字节编码范围
- x20-x7f ASCII
- xa1-xff 中文
- x80-xff 中文
- 2. UTF-8 (Unicode)
- u4e00-u9fa5 (中文)
- x3130-x318F (韩文
- xAC00-xD7A3 (韩文)
- u0800-u4e00 (日文)
- ps: 韩文是大于[u9fa5]的字符
- */
- //二、代码例子
- //截取字符串字串-GBK (PHP)
- function gb_substr($str, $len)
- {
- $count = 0;
- for ($i = 0; $i < strlen($str); $i++) {
- if ($count == $len) break;
- if (preg_match("/[x80-xff]/", substr($str, $i, 1))) ++$i;
- ++$count;
- }
- return substr($str, 0, $i);
- }
- function substrGb($str, $len)
- {
- $ret = '';
- $i = 0;
- while ($i < $len) {
- $ch = substr($str, $i, 1);
- if (ord($ch) > 0x80) {
- $i++;
- }
- $i++;
- }
- $ret = substr($str, 0, $i);
- return $ret;
- }
- //截取字符串-UTF8(PHP)
- function utf8_substr($str, $position, $length)
- {
- $start_position = strlen($str);
- $start_byte = 0;
- $end_position = strlen($str);
- $count = 0;
- for ($i = 0; $i < strlen($str); $i++) {
- if ($count >= $position && $start_position > $i) {
- $start_position = $i;
- $start_byte = $count;
- }
- if (($count - $start_byte) >= $length) {
- $end_position = $i;
- break;
- }
- $value = ord($str[$i]);
- if ($value > 127) {
- $count++;
- if ($value >= 192 && $value <= 223) $i++;
- elseif ($value >= 224 && $value <= 239) $i = $i + 2;
- elseif ($value >= 240 && $value <= 247) $i = $i + 3;
- else die('Not a UTF-8 compatible string');
- }
- $count++;
- }
- return (substr($str, $start_position, $end_position - $start_position));
- }
- // int ord ( string string )------返回字符的ASCII码
- // string chr ( int ascii )-----根据字符的ASCII码返回相应的字符
对PHP字符串操作的内容就是这么多了,大家可以测试测试了解一下!
相关推荐:
php字符串用法详解
以上就是PHP操作字符串详解的详细内容,更多请关注Gxl网其它相关文章!