php mb_substr实现中文字符串截取无乱码的方法

 更新时间:2016年11月25日 16:46  点击:1419
在网上看到有很多字符截取函数大仔细研究了一下发现所有的都是针对编码问题进行处理了,下面我们看一个简化的函数,希望对大家有帮助。

注意:在windows目录下找到php.ini打开编辑,搜索mbstring.dll,找到
;extension=php_mbstring.dll把前面的;号去掉,这样mb_substr函数就可以生效了


例子

 代码如下 复制代码

<?php
$str = '这样一来我的字符串就不会有乱码^_^';

echo "mb_substr:" . mb_substr($str, 0, 7, 'utf-8');
//结果:这样一来我的字
echo "<br>";

echo "mb_strcut:" . mb_strcut($str, 0, 6, 'utf-8');
//结果:这样
?>

从上面的例子可以看出,mb_substr是按字来切分字符,而mb_strcut是按字节来切分字符,但是都不会产生半个字符的现象。

 代码如下 复制代码


/**
 *   实现中文字串截取无乱码的方法
 */
function getSubstr($string, $start, $length) {
        if(mb_strlen($string,'utf-8')>$length){
            $str = mb_substr($string, $start, $length,'utf-8');
            return $str.'...';
        }else{
                return $string;
        }
}

今天看到一个朋友利用php socket来获取的301跳转之后地地址了,其实我们还有一个非常简单办法了,就是使用php get_headers()函数获取数获取http头信息了,下面来看看我们的实现方法。

获取301状态肯定没问题。

 代码如下 复制代码

function getrealurl($url){
 $header = get_headers($url,1);
 if (strpos($header[0],'301') || strpos($header[0],'302')) {
  if(is_array($header['Location'])) {
   return $header['Location'][count($header

['Location'])-1];
  }else{
   return $header['Location'];
  }
 }else {
  return $url;
 }
}

补充:get_headers — 取得服务器响应一个 HTTP 请求所发送的所有标头

 代码如下 复制代码

$url = 'http://111cn.net';

print_r(get_headers($url));

结果

 代码如下 复制代码

Array
(
    [0] => HTTP/1.1 301 Moved Permanently
    [1] => Date: Tue, 01 Jul 2014 07:49:26 GMT
    [2] => Server: Apache/2.2.22 (Win32) PHP/5.2.17
    [3] => Location: http://www.111cn.net/
    [4] => Content-Length: 314
    [5] => Content-Type: text/html; charset=iso-8859-1
    [6] => X-Via: 1.1 jszjsx60:8080 (Cdn Cache Server V2.0), 1.1 zb51:6 (Cdn Cache Server V2.0)
    [7] => Connection: close
    [8] => HTTP/1.1 200 OK
    [9] => Date: Tue, 01 Jul 2014 07:49:27 GMT
    [10] => Server: Apache/2.2.22 (Win32) PHP/5.2.17
    [11] => Last-Modified: Tue, 01 Jul 2014 07:41:43 GMT
    [12] => ETag: "7a0000002fe1a1-68a9-4fd1ce83bc0f7"
    [13] => Accept-Ranges: bytes
    [14] => Content-Length: 26793
    [15] => Content-Type: text/html
    [16] => X-Via: 1.1 jszjsx60:8080 (Cdn Cache Server V2.0), 1.1 zb62:5 (Cdn Cache Server V2.0)
    [17] => Connection: close
)

date函数是php中一个非常好用的日期获取函数了,我们可以使用它来获取指定日期或者当前日期了,下面我来简单的介绍一下date函数用法与常用用法吧。

PHP星期几获取代码:

 代码如下 复制代码

date(“l”); //data就可以获取英文的星期比如Sunday
date(“w”); //这个可以获取数字星期比如123,注意0是星期日

获取中文星期几:

 代码如下 复制代码

$weekarray=array(“日”,”一”,”二”,”三”,”四”,”五”,”六”); //先定义一个数组

echo “星期”.$weekarray[date("w")];

获取指定日期是:

 代码如下 复制代码

$weekarray=array(“日”,”一”,”二”,”三”,”四”,”五”,”六”);
echo “星期”.$weekarray[date("w","2011-11-11")];

PHP函数Date()获取当前时间

 代码如下 复制代码

<?php echo $showtime=date("Y-m-d H:i:s");?>

输出当前时间:2008-10-12 02:32:17
怪了,实际时间是:2008-10-12 10:32:17


看看PHP手册的“例子 1. date() 例子”第一行多了一个 时区设置
// 设定要用的默认时区。自 PHP 5.1 可用

 代码如下 复制代码

date_default_timezone_set(UTC);

原来php5.1.开始,php.ini里加入了date.timezone这个选项,默认情况下是关闭的,也就是显示的时间(无论用什么php命令)都是格林威治标准时间,和北京时间正好差8个小时。

如何设置可以得到正确的PHP时间?

1、修改php.ini。打开php.ini查找date.timezone 去掉前面的分号= 后面加Asia/Shanghai,重启apache服务器即可--缺点就是如果程序
放到别人的服务器上,不能修改php.ini,那就奈何不得了。
2、在程序中添加时间的初始化的语句的 即:“date_default_timezone_set("Asia/Shanghai"); ”这个可以由程序员任意设置,我的推荐。
时区标识符,大陆内地可用的值是:PRC,Asia/Chongqing ,Asia/Shanghai ,Asia/Urumqi (依次为中国,重庆,上海,乌鲁木齐) ,Etc/GMT-8,Asia/Harbin
港台地区可用:Asia/Macao ,Asia/Hong_Kong ,Asia/Taipei (依次为澳门,香港,台北)还有新加坡:Asia/Singapore
这样就可以实现输出的是北京时间了。

ini_get函数是获取php中环境变量的值了,当然ini_get能获取到的是要我们php中允许它获取它才可以获取,否则是无法获取到的哦,ini_get只是获取环境变量值它并不能修改环境变量值哦


例如:php.ini文件中包含了以下的设置:

 代码如下 复制代码

register_globals = Off

post_max_size = 8M

PHP部分我们可以这样获取:

 

 代码如下 复制代码
<?php
echo 'display_errors = ' . ini_get('display_errors') . "\n";
echo 'register_globals = ' . ini_get('register_globals') . "\n";
echo 'post_max_size = ' . ini_get('post_max_size') . "\n";
echo 'post_max_size+1 = ' . (ini_get('post_max_size')+1) . "\n";
echo 'post_max_size in bytes = ' . return_bytes(ini_get('post_max_size'));
?>

如果想获取整个php.ini里的变量值,我们可以用ini_get的加强函数 ini_get_all()

ini_get_all()函数以数组的形式返回整个php的环境变量


当然如果你只是想了解下php的配置信息用
<?php
phpinfo();
?>

接着向下看

php手册中有一个例子

 

 代码如下 复制代码
<?php
/* 
Our php.ini contains the
following settings: 
 
display_errors = On
register_globals = Off
post_max_size = 8M
*/ 
echo ‘display_errors = ‘ .
ini_get(’display_errors’) . “\n”;
//显示错误是否打开 
echo ‘register_globals = ‘ .
ini_get(’register_globals’) . “\n”;
//全局变量是否打开 
echo ‘post_max_size = ‘ . ini_get(’
post_max_size’) . “\n”;
//最多能提交的文件大小 
echo ‘post_max_size+1 = ‘ .
(ini_get(’post_max_size’)+1) . “\n”; 
?>

输出:

display_errors = 1
register_globals = 0
post_max_size = 8M
post_max_size+1 = 9

PHP配置函数ini_get()主要是为了获取配置文件,可以方便你很多操作。比如你想操作字符串过滤,但是又不清楚magic_quotes_gpc有没有打开,所以你就可以这样写一个函数:

 代码如下 复制代码

/* 字符串过滤函数 */ 

function stringFilter($str) 

if (ini_get(’magic_quotes_gpc)’)

return $str; 
}
else { 
return addslashes($str); 

}

当然,如果你无法知道你的全局变量是否打开,也可以定制这样的函数:
/* 变量检测函数 */ 

 代码如下 复制代码
function getGetVar($var) 

if (ini_set(’register_gobals’))

return $var; 
}
else { 
return $_GET['var']; 

}

当然,你可以用PHP配置函数ini_get()做很多用途,自己慢慢体会。

补充

1.ini_get()获取配置参数,ini_set()设置配置参数

 代码如下 复制代码


<?php
echo ini_get('display_errors'); //1
//动态修改php.ini配置信息,脚本执行后失效
ini_set('display_errors',0);
echo ini_get('display_errors');//0

2.ini_get_all()获取所有配置信息

 代码如下 复制代码


<?php
//打印所有配置信息,巨多。。。
print_r(ini_get_all());

3.ini_restore()恢复配置信息到原始值

 代码如下 复制代码

<?php

echo ini_get('display_errors'); //1
//动态修改php.ini配置信息,脚本执行后失效
ini_set('display_errors',0);
ini_restore('display_errors');
echo ini_get('display_errors');//1

PHP中rename函数在表现上看是用来重命名的,其实我们还可以使用PHP中rename函数来移动文件或文件夹哦,这个下面我们就来给大家介绍一下。


偶然做文件移动的时候总结的一个知识点:刚开始的时候,以为跟上传文件一样可以用move_uploaded_file这个函数去移动一个文件,试了之后发现不行,网上搜了一把,发现可以用rename这个函数来实现文件或文件夹的移动,很奇怪,手册上写的是重名文件或文件夹的,没想到可以用来移动文件

关于函数返回值:

bool rename ( string $oldname , string $newname [, resource $context ] )
尝试把 oldname 重命名为 newname,若操作成功则返回True,失败返回False。


1. 对于文件,rename可以在不同盘符之间移动。
2. 对于空文件夹,rename也可以在不同盘符之间移动。但是目标文件夹的父目录必须存在。
3. 对于非空文件夹,只能在同一盘符下移动。

用法如下:

rename("/tmp/www.txt", "/home/my_file.txt");

第一个参数放原地址,第二个参数放目标地址;

网上还有一种方法是用copy+unlink,不过听说移动的速度不怎样,所以也就不说了,用rename就行,简单、方便、快捷

可能习惯用copy,unlink来实现文件的移动,对于大文件,可能会消耗很长时间,但是经测试发现性能不行。

补充:中文文件及文件夹的问题

[!--infotagslink--]

相关文章

  • js URLdecode()与urlencode方法支持中文解码

    下面来介绍在js中来利用urlencode对中文编码与接受到数据后利用URLdecode()对编码进行解码,有需要学习的机友可参考参考。 代码如下 复制代码 ...2016-09-20
  • C#中截取字符串的的基本方法详解

    这篇文章主要介绍了C#中截取字符串的的基本方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-11-03
  • c#中判断字符串是不是数字或字母的方法

    这篇文章介绍了C#判断字符串是否数字或字母的实例,有需要的朋友可以参考一下...2020-06-25
  • PostgreSQL判断字符串是否包含目标字符串的多种方法

    这篇文章主要介绍了PostgreSQL判断字符串是否包含目标字符串的多种方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下...2021-02-23
  • 详解C++ string常用截取字符串方法

    这篇文章主要介绍了C++ string常用截取字符串方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-04-25
  • php字符串按照单词逐个进行反转的方法

    本文实例讲述了php字符串按照单词进行反转的方法。分享给大家供大家参考。具体分析如下:下面的php代码可以将字符串按照单词进行反转输出,实际上是现将字符串按照空格分隔到数组,然后对数组进行反转输出。...2015-03-15
  • MySQL 字符串拆分操作(含分隔符的字符串截取)

    这篇文章主要介绍了MySQL 字符串拆分操作(含分隔符的字符串截取),具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-22
  • 使用list stream: 任意对象List拼接字符串

    这篇文章主要介绍了使用list stream:任意对象List拼接字符串操作,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教...2021-09-09
  • 关于Mysql中文乱码问题该如何解决(乱码问题完美解决方案)

    最近两天做项目总是被乱码问题困扰着,这不刚把mysql中文乱码问题解决了,下面小编把我的解决方案分享给大家,供大家参考,也方便以后自己查阅。首先:用show variables like “%colla%”;show varables like “%char%”;这两条...2015-11-24
  • C# 16 进制字符串转 int的方法

    这篇文章主要介绍了C# 16 进制字符串转 int的方法,非常不错,具有参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • 获取中文字符串的实际长度代码

    JS中默认中文字符长度和其它字符长度计算方法是一样的,但某些情况下我们需要获取中文字符串的实际长度,代码如下: 复制代码 代码如下: function strLength(str) { var realLength = 0, len = str.length, charCode = -1;...2014-06-07
  • C#读取中文文件出现乱码的解决方法

    这篇文章主要介绍了C#读取中文文件出现乱码的解决方法,涉及C#中文编码的操作技巧,非常具有实用价值,需要的朋友可以参考下...2020-06-25
  • C#实现字符串转换成字节数组的简单实现方法

    这篇文章主要介绍了C#实现字符串转换成字节数组的简单实现方法,仅一行代码即可搞定,非常简单实用,需要的朋友可以参考下...2020-06-25
  • Mysql在debian系统中不能插入中文的终极解决方案

    在debian环境下,彻底解决mysql无法插入和显示中文的问题Linux下Mysql插入中文显示乱码解决方案mysql -uroot -p 回车输入密码进入mysql查看状态如下:默认的是客户端和服务器都用了latin1,所以会乱码。解决方案:mysql>use...2013-10-04
  • PostgreSQL 字符串处理与日期处理操作

    这篇文章主要介绍了PostgreSQL 字符串处理与日期处理操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧...2021-02-01
  • Windows服务器MySQL中文乱码的解决方法

    我们自己鼓捣mysql时,总免不了会遇到这个问题:插入中文字符出现乱码,虽然这是运维先给配好的环境,但是在自己机子上玩的时候咧,总得知道个一二吧,不然以后如何优雅的吹牛B。...2015-03-15
  • php 中英文混合字符串截取

    文章介绍一个实用的函数,我们如果用php substr来截取字符在中文上处理的很有问题,今天自己写了一个比较好的中文与英文字符截取的函数,有需要的朋友可以参考下。 ...2016-11-25
  • linux mint 下mysql中文支持问题

    一.mysql默认不支持中文,它的server和db默认是latin1编码.所以我们要将其改变为utf-8编码,因为utf-8包含了地球上大部分语言的二进制编码 1.关闭mysql服务 sudo /etc/init.d/mysql stop 2.修改mysql配置文件 mysql配...2015-10-21
  • C#实现对字符串进行大小写切换的方法

    这篇文章主要介绍了C#实现对字符串进行大小写切换的方法,涉及C#操作字符串的技巧,具有一定参考借鉴价值,需要的朋友可以参考下...2020-06-25
  • c#将字节数组转成易读的字符串的实现

    这篇文章主要介绍了c#将字节数组转成易读的字符串的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2020-06-25