Home  >  Article  >  php教程  >  php中文字串截取无乱码的方法

php中文字串截取无乱码的方法

WBOY
WBOYOriginal
2016-05-25 16:44:501385browse

在网上找到了很多关于php截取中文方法,其中最多的还是讲到使用mb_substr函数来截取了,这个函数需要php.ini中一个拓展支持,但我没权限修改只有另想办法.

substr截取:substr() 函数返回字符串的一部分,代码如下:

<?php 
	$rest = substr("我是中国人", -1);    // returns "乱码" 
	echo $rest.&#39;<br />&#39;; 
	$rest = substr("abcdef", -2);    // returns "ef" 
	echo $rest.&#39;<br />&#39;; 
	$rest = substr("abcdef", -3, 1); // returns "d" 
	echo $rest.&#39;<br />&#39;; 
?>

接着百度goole说可以mb_substr截取,代码如下:

<?php  
	echo mb_substr(&#39;我们都是好孩子hehe&#39;,0,9);  
	 
	//运行机制提示 
	//Fatal error: Call to undefined function mb_substr()...  
?>

后来有朋友告诉我是一般的服务器都没打开php_mbstring.dll,需要在php.ini中把php_mbstring.dll打开,找到idc商不开,只有另想办法,代码如下:

<?php function msubstr($str, $start=0, $length, $charset="utf-8", $suffix=true) 
{ 
	if(function_exists("mb_substr")) 
		return mb_substr($str, $start, $length, $charset); 
	elseif(function_exists(&#39;iconv_substr&#39;)) { 
		return iconv_substr($str,$start,$length,$charset); 
	} 
	$re[&#39;utf-8&#39;]   = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/"; 
	$re[&#39;gb2312&#39;] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/"; 
	$re[&#39;gbk&#39;]    = "/[x01-x7f]|[x81-xfe][x40-xfe]/"; 
	$re[&#39;big5&#39;]   = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/"; 
	preg_match_all($re[$charset], $str, $match); 
	$slice = join("",array_slice($match[0], $start, $length)); 
	if($suffix) return $slice."&hellip;"; 
	return $slice; 
}
?>

这个正好解决了所有问题了,看是否按字符编码来进行截取了.

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn