Heim >php教程 >php手册 >php中文字串截取无乱码的方法

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

WBOY
WBOYOriginal
2016-05-25 16:44:501466Durchsuche

在网上找到了很多关于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; 
}
?>

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

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn