php关于字串的若干问题(如截取、反转)

来源:互联网 发布:北大出版社《最优化》 编辑:程序博客网 时间:2024/06/06 00:21

在学习面向对象的时候,很经典的一句话就是“一切都是对象”,如果要在字串中套用,那”一切都是字串“这句话也是说得通的。字串的问题很多,什么反转、截取、不同编码不同语言所带来的乱码问题等等。在php中,应该是为我们准备了两套关于字串的操作函数,其中多字节字串函数对于处理类似中文这样的很方便。在php中字串包夹在单引号或双引号之间,二者没有什么根本性的不同,只是在双引号中的变量会被解析,而单引号中的变量不会被解析。因此,强烈建议如果字串中没有变量,用单引号,因为这样更快!

<?phpheader('Content-type=txt/html;charset=utf-8');/*有一个网页地址,如http://www.sina.com.cn/,如何得到它的内容*/function get_url_contents($url){$readcontents = fopen($url,'rb');$contents = stream_get_contents($readcontents);fclose($readcontents);return $contents;}echo get_url_contents('http://www.sina.com.cn/');echo file_get_contents('http://www.sina.com.cn/');/*Heredoc技术,在正规的PHP文档中和技术书籍中一般没有详细讲述,只是提到了这是一种Perl风格的字符串输出技术。1、以<<<End开始标记开始,以End结束标记结束,结束标记必须顶头写,不能有缩进和空格,且在结束标记末尾要有分号 。2、开始标记和开始标记相同,比如常用大写的EOT、EOD、EOF来表示,但是不只限于那几个,只要保证开始标记和结束标记不在正文中出现即可。3、位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以在heredoc中,变量不需要用连接符.或,来拼接。*/function output_html(){echo <<<EOD<html><head><title>heredoc</title></head><body><p>我是heredoc,是一种很方便的字串输出技术</p></body></html>EOD;}echo output_html().'<br>';/*substr()可以截取字串,strrev()可以翻转字串,但中文会出现乱码。与多字节字串函数相比,可以称这样的函数为单字节字串函数,顾名思义就是以一个字节为单位处理字串。我们知道,在很多编码中中文都不会是单字节,如gbk中占2字节,utf-8中占3字节,更有在unicode编码体系中,很多占4字节甚至5字节。所以用单字节字串函数处理多字节的中文不出错才怪。乱码处理一般方法如下:1、文档编写保存时和处理时采用一样的编码,web中一般用utf-82、字串处理中应当采用多字节处理函数,当然用单字节处理函数也是可行的,只是有时候会比较麻烦3、在字串处理前,先判断其编码,再相应处理。当然我们可以先判断是不是utf-8编码,不是我们再转换成utf-8之后在统一处理,其他编码类似。mb_detect_encoding — 检测字符的编码,据说该函数不太准,慎用mb_check_encoding — 检查字符串在指定的编码里是否有效mb_convert_encoding — 转换字符的编码*/function my_strrev1($str){//字串反转if(!is_string($str))//不是字串,退出exit('不是字串');if(!mb_check_encoding($str,'UTF-8')){//不是utf-8编码,转换$str = mb_convert_encoding($str,'utf-8');}$array=array();//将字符串存入数组$l=mb_strlen($str,'UTF-8');for($i=0;$i<$l;$i++){$array[]=mb_substr($str,$i,1,'UTF-8');}krsort($array);//反转字符串$string=implode($array);//拼接字符串return $string;}function my_strrev2($str){//字串反转if(!is_string($str))//不是字串,退出return false;if(!mb_check_encoding($str,'UTF-8')){//不是utf-8编码,转换$str = mb_convert_encoding($str,'utf-8');}$ret='';for($i=0;$i<mb_strlen($str);$i++){$ret = mb_substr($str,$i,1,'utf-8').$ret;}return $ret;}function my_substr($str,$from,$len){//字串截取if ($from>=0 && $len<=mb_strlen($str,'utf-8')-$from+1)return mb_substr($str,$from,$len,'utf-8');return false;}$str='我是php,我能翻转';echo my_strrev1($str).'<br>';echo my_strrev2($str).'<br>';echo my_substr($str,7,1).'<br>';/*产生指定长度的随机字串mt_rand()--生成更好的随机数,比rand()快4倍且自动播种,也可以播种mt_srand(time());*/function get_random_str($len){$pattern = '0123456789qbcdefghijklmnopqrsuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';$ret = '';mt_srand(time());for($i=0;$i<$len;$i++){$ret .=$pattern[mt_rand(0,61)];}return $ret;}  echo get_random_str(8).'<br>';?>

0 0
原创粉丝点击