php 字符串 中文,php 中文字符串截取乱码
PHP截取字符串如果是英文直接用substr就可以了,但對于中文字符,用substring可能會導(dǎo)致亂碼,那么將如何解決呢?
1、通過函數(shù)mb_substr實(shí)現(xiàn)
說明:mb_substr($str, $start, $length, $encoding);通過該函數(shù)即可,但需要加載php_mbstring.dll擴(kuò)展。
案例:<?php
$str?=?'這是一個(gè)字符串切割函數(shù)';
echo?"mb_substr:".mb_substr($str,?0,?7,?'utf-8');
?>
2、通過函數(shù)mb_strcut實(shí)現(xiàn)
說明:mb_strcut() 和 mb_substr() 類似,都是從一個(gè)字符串中提取子字符串,但是按字節(jié)數(shù)來執(zhí)行,而不是字符個(gè)數(shù)。 如果截?cái)辔恢梦挥诙嘧止?jié)字符兩個(gè)字節(jié)的中間,將于該字符的第一個(gè)字節(jié)開始執(zhí)行。 這也是和 substr() 函數(shù)的不同之處,后者簡單地將字符串在字節(jié)之間截?cái)?#xff0c;這將導(dǎo)致一個(gè)畸形的字節(jié)序列。
3、通過編寫的函數(shù)(支持UTF-8和GB2312)
案例:<?php
/*
Utf-8、gb2312都支持的漢字截取函數(shù)
cut_str(字符串,?截取長度,?開始長度,?編碼);
編碼默認(rèn)為?utf-8
開始長度默認(rèn)為?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?=?"這是一個(gè)字符串切割函數(shù)";
echo?cut_str($str,?8,?0,?'gb2312');
?>
總結(jié)
以上是生活随笔為你收集整理的php 字符串 中文,php 中文字符串截取乱码的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 关于电脑的日常维护电脑如何维护
- 下一篇: shu函数php,【函数分享】每日PHP