Heim >php教程 >PHP源码 >不使用mb_substr函数切割字符串函数

不使用mb_substr函数切割字符串函数

PHP中文网
PHP中文网Original
2016-05-25 17:12:461401Durchsuche

跳至

function cutstr($string, $length, $dot = ' ...') 
{
	global $charset;

	if(strlen($string) <= $length) return $string;

	$string = str_replace(array(&#39;&&#39;, &#39;"&#39;, &#39;<&#39;, &#39;>&#39;), array(&#39;&&#39;, &#39;"&#39;, &#39;<&#39;, &#39;>&#39;), $string);

	$strcut = &#39;&#39;;
	
	if(strtolower($charset) == &#39;utf-8&#39;)
	{
		$n = $tn = $noc = 0;
		
		while($n < strlen($string))
		{
			$t = ord($string[$n]);

			// 特别要注意这部分,utf-8是1--6位不定长表示的,这里就是如何
			// 判断utf-8是1位2位还是3位还是4、5、6位,这对其他语言的编程也有用处
			// 具体可以查看rfc3629或rfc2279
			if($t == 9 || $t == 10 || (32 <= $t && $t <= 126))
			{
				$tn = 1; $n++; $noc++;
			}
			elseif(194 <= $t && $t <= 223)
			{
				$tn = 2; $n += 2; $noc += 2;
			}
			elseif(224 <= $t && $t < 239)
			{
				$tn = 3; $n += 3; $noc += 2;
			}
			elseif(240 <= $t && $t <= 247)
			{
				$tn = 4; $n += 4; $noc += 2;
			}
			elseif(248 <= $t && $t = $length)
			{
				break;
			}

		}
		
		if($noc > $length) $n -= $tn;

		$strcut = substr($string, 0, $n);
	}
	else
	{
		for($i = 0; $i < $length; $i++)
		{
			$strcut .= ord($string[$i]) > 127 ? $string[$i] . $string[++$i] : $string[$i];
		}
	}

	$strcut = str_replace(array(&#39;&&#39;, &#39;"&#39;, &#39;<&#39;, &#39;>&#39;), array(&#39;&&#39;, &#39;"&#39;, &#39;<&#39;, &#39;>&#39;), $strcut);

	return $strcut . $dot;
}

                       

           

2. [代码]使用方法    

$testStr = "好好学习!(good good study)天天向上!(day day up)";     // ^_^! V

// 使用utf文档
echo cutstr($testStr, 10);

// 使用dos文档使用以下代码测试utf-8的效果
//$testStr = iconv(&#39;GBK&#39;, &#39;UTF-8&#39;, $testStr);
//echo iconv(&#39;UTF-8&#39;, &#39;GBK&#39;, cutstr($testStr, 10));

           


       

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
Vorheriger Artikel:php实现的mongodb操作类Nächster Artikel:php网络爬虫技术