php 字符串 中文,php 中文字符串截取乱码
PHP截取字符串如果是英文直接用substr就可以了,但對于中文字符,用substring可能會導致亂碼,那么將如何解決呢?
1、通過函數mb_substr實現
說明:mb_substr($str, $start, $length, $encoding);通過該函數即可,但需要加載php_mbstring.dll擴展。
案例:<?php
$str?=?'這是一個字符串切割函數';
echo?"mb_substr:".mb_substr($str,?0,?7,?'utf-8');
?>
2、通過函數mb_strcut實現
說明:mb_strcut() 和 mb_substr() 類似,都是從一個字符串中提取子字符串,但是按字節數來執行,而不是字符個數。 如果截斷位置位于多字節字符兩個字節的中間,將于該字符的第一個字節開始執行。 這也是和 substr() 函數的不同之處,后者簡單地將字符串在字節之間截斷,這將導致一個畸形的字節序列。
3、通過編寫的函數(支持UTF-8和GB2312)
案例:<?php
/*
Utf-8、gb2312都支持的漢字截取函數
cut_str(字符串,?截取長度,?開始長度,?編碼);
編碼默認為?utf-8
開始長度默認為?0
*/
function?cut_str($string,?$sublen,?$start?=?0,?$code?=?'UTF-8')
{
$string?=?str_replace(array('&',?'"',?''),?array('&',?'"',?''),?$string);
if($code?==?'UTF-8')
{
$pa?=?"/[\x01-\x7f]|[\xc2-\xdf][\x80-\xbf]|\xe0[\xa0-\xbf][\x80-\xbf]|[\xe1-\xef][\x80-\xbf][\x80-\xbf]|\xf0[\x90-\xbf][\x80-\xbf][\x80-\xbf]|[\xf1-\xf7][\x80-\xbf][\x80-\xbf][\x80-\xbf]/";
preg_match_all($pa,?$string,?$t_string);
if(count($t_string[0])?-?$start?>?$sublen)?return?join('',?array_slice($t_string[0],?$start,?$sublen))."...";
return?join('',?array_slice($t_string[0],?$start,?$sublen));
}
else
{
$start?=?$start*2;
$sublen?=?$sublen*2;
$strlen?=?strlen($string);
$tmpstr?=?'';
for($i=0;?$i
{
if($i>=$start?&&?$i
{
if(ord(substr($string,?$i,?1))>0xa0)
{
$tmpstr.=?substr($string,?$i,?2);
}
else
{
$tmpstr.=?substr($string,?$i,?1);
}
}
if(ord(substr($string,?$i,?1))>0xa0)?$i++;
}
if(strlen($tmpstr)
return?$tmpstr;
}
}
$str?=?"這是一個字符串切割函數";
echo?cut_str($str,?8,?0,?'gb2312');
?>
總結
以上是生活随笔為你收集整理的php 字符串 中文,php 中文字符串截取乱码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于电脑的日常维护电脑如何维护
- 下一篇: 想要提升电脑性能如何让电脑性能提升