解决php截取中英文不出现乱码

在使用php截取字符串的时候,很有可能会遇到乱码的问题。

比如下面的代码

echo substr("最全的编程技术",0,7); 

得到的结果将会是

最全�

为什么呢?

因为中文字符在php中是占三个字符的。

这段代码截取7个字符,所以前面两个是正确的,但是第三个就是乱码了。

今天这个函数是真正的不管是中文还是英文,都能正确截取,并且不会出现乱码。

    <?php
    function displaystr($str, $start, $lenth){
    	$len = strlen($str);
    	$r = array();
    	$n = 0;
    	$m = 0;
    	for($i = 0; $i < $len; $i++) {
    		$x = substr($str, $i, 1);
    		$a  = base_convert(ord($x), 10, 2);
    		$a = substr('00000000'.$a, -8);
    		if ($n < $start){
    			if (substr($a, 0, 1) == 0) {
    			}elseif (substr($a, 0, 3) == 110) {
    				$i += 1;
    			}elseif (substr($a, 0, 4) == 1110) {
    				$i += 2;
    			}
    			$n++;
    		}else{
    			if (substr($a, 0, 1) == 0) {
    				$r[ ] = substr($str, $i, 1);
    			}elseif (substr($a, 0, 3) == 110) {
    				$r[ ] = substr($str, $i, 2);
    				$i += 1;
    			}elseif (substr($a, 0, 4) == 1110) {
    				$r[ ] = substr($str, $i, 3);
    				$i += 2;
    			}else{
    				$r[ ] = '';
    			}
    			if (++$m >= $lenth){
    				break;
    			}
    		}
    	}
    	return join('',$r);
    }
    ?>

其中$str是要截取的字符串,$start是开始截取的位置,$lenth为将要截取的长度。

转载自 http://www.santii.com/article/45.html


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值