‘壹’ php正则 截取字符串长度
如果是中文,要用mbsubstr 详见php帮助
你可以去后盾人平台看看,里面的东西不错
‘贰’ PHP截取字符串长度
php截取中文字符串无乱码函数:
function ZHsubstr($str, $start=0, $length, $charset="utf-8"){
$len = strlen($str); //原字节数
if($len > $length)
$suffixStr = "…";
else
$suffixStr = "";
if(function_exists("mb_substr"))
return mb_substr($str, $start, $length, $charset).$suffixStr;
elseif(function_exists('iconv_substr')) {
return iconv_substr($str,$start,$length,$charset).$suffixStr;
}
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
$slice = join("",array_slice($match[0], $start, $length));
return $slice.$suffixStr;
}
使用方法:
$str = "$page_title";
$page_title=ZHsubstr($str, 0, 40, 'utf-8');
‘叁’ 实现php模板页面截取文本编辑中指定内容的长度
给你个思路,先提取出来纯文本(利用去除html函数)
然后截取指定长度,最后再替换掉原文本,保留原来的html标签
就可以了
‘肆’ php如何获取中文字符长度,一个中文字符算一个
在PHP中专门的mb_substr和mb_strlen函数,可以对中文进行截取和计算长度,但是,由于这些函数并非PHP的核心函数,所以,它们常常有可能没有开启。要在php.ini中开启即可。获取长度实例:1 ,utf-8环境下使用
header('Content-type:text/html;charset=utf-8');
/**
*可以统计中文字符串长度的函数
*@param$str要计算长度的字符串
*@param$type计算长度类型,0(默认)表示一个中文算一个字符,1表示一个中文算两个字符
*
*/
functionabslength($str)
{
if(empty($str)){
return0;
}
if(function_exists('mb_strlen')){
returnmb_strlen($str,'utf-8');
}
else{
preg_match_all("/./u",$str,$ar);
returncount($ar[0]);
}
}
$str='我们都是中国人啊,ye!';
$len=abslength($str);
var_mp($len);//return12
$len=abslength($str,'1');
echo'<br/>'.$len;//return22
/*
utf-8编码下截取中文字符串,参数可以参照substr函数
@param$str要进行截取的字符串
@param$start要进行截取的开始位置,负数为反向截取
@param$end要进行截取的长度
*/
functionutf8_substr($str,$start=0){
if(empty($str)){
returnfalse;
}
if(function_exists('mb_substr')){
if(func_num_args()>=3){
$end=func_get_arg(2);
returnmb_substr($str,$start,$end,'utf-8');
}
else{
mb_internal_encoding("UTF-8");
returnmb_substr($str,$start);
}
}
else{
$null="";
preg_match_all("/./u",$str,$ar);
if(func_num_args()>=3){
$end=func_get_arg(2);
returnjoin($null,array_slice($ar[0],$start,$end));
}
else{
returnjoin($null,array_slice($ar[0],$start));
}
}
}
$str2='wo要截取zhongwen';
echo'<br/>';
echoutf8_substr($str2,0,-4);//returnwo要截取zhon
2,支持gb2312,gbk,utf-8,big5 中文截取方法
/*
* 中文截取,支持gb2312,gbk,utf-8,big5
*
* @param string $str 要截取的字串
* @param int $start 截取起始位置
* @param int $length 截取长度
* @param string $charset utf-8|gb2312|gbk|big5 编码
* @param $suffix 是否加尾缀
*/
public function csubstr($str, $start=0, $length, $charset="utf-8", $suffix=true)
{
if(function_exists("mb_substr"))
{
if(mb_strlen($str, $charset) <= $length) return $str;
$slice = mb_substr($str, $start, $length, $charset);
}
else
{
$re['utf-8'] = "/[x01-x7f]|[xc2-xdf][x80-xbf]|[xe0-xef][x80-xbf]{2}|[xf0-xff][x80-xbf]{3}/";
$re['gb2312'] = "/[x01-x7f]|[xb0-xf7][xa0-xfe]/";
$re['gbk'] = "/[x01-x7f]|[x81-xfe][x40-xfe]/";
$re['big5'] = "/[x01-x7f]|[x81-xfe]([x40-x7e]|xa1-xfe])/";
preg_match_all($re[$charset], $str, $match);
if(count($match[0]) <= $length) return $str;
$slice = join("",array_slice($match[0], $start, $length));
}
if($suffix) return $slice."…";
return $slice;
}
‘伍’ 如何截取php标题长度
php的用substr函数来截取
$rest = substr("abcdef", -1); // 返回 "f"
$rest = substr("abcdef", -2); // 返回 "ef"
$rest = substr("abcdef", -3, 1); // 返回 "d"
‘陆’ 最准确的php截取字符串长度函数
说是最精确截取长度,其实我也不敢确定是否是最精确的,具体有多精确看下面的效果就知道了:
先上测试用的字符串:
<?php
header("Content-Type:text/html;charset=utf-8");
echo
cn_substr_utf8('我是一个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('ai\'2145m
a
ch3我[是一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('【我,是一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('我是一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('我是,一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('我,是,一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('我是asd一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('【我i\'m[是一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('【i\'m
a
ch我[是一,个,和哈,哦也,,国家!',12);
echo
'<br
/>',cn_substr_utf8('【i\'2145m
a
ch3我[是一,个,和哈,哦也,,国家!',12);
下面是精确截取字符串的效果图:
具体函数代码如下:
//utf-8中文截取,单字节截取模式
function
cn_substr_utf8($str,$length,$append='...',$start=0){
if(strlen($str)<$start+1){
return
'';
}
preg_match_all("/./su",$str,$ar);
$str2='';
$tstr='';
//www.phpernote.com
for($i=0;isset($ar[0][$i]);$i++){
if(strlen($tstr)<$start){
$tstr.=$ar[0][$i];
}else{
if(strlen($str2)<$length
+
strlen($ar[0][$i])){
$str2.=$ar[0][$i];
}else{
break;
}
}
}
return
$str==$str2?$str2:$str2.$append;
}
如果大家认为还不够准确大家可以在此基础上进行改进,或者是创新,希望这篇关于php截取字符串长度函数的文章对大家的学习有所帮助。
‘柒’ PHP 如何截取标题长度 (utf-8编码)
你可以查询出完整标题,然后用 CSS 的 overflow指定超出部分不显示,在标题中含有中英、数字混合的情况,很难做到字符串排版的宽度一致。
还有最坏的情况,用截断的方法,把实际完整的标题断开,破坏了原义,对SEO是无比的伤害。
用css控制显示长度才是最好的做法。
‘捌’ php如何截取汉字长度啊
function cutstr($string, $length, $dot = '') {
global $dbcharset;
$length*=2;
if(strlen($string) <= $length) {
return $string;
}
$string = str_replace(array('&', '"', '<', '>'), array('&', '"', '<', '>'), $string);
$strcut = '';
if(strtolower($dbcharset) == 'utf8') {
$n = $tn = $noc = 0;
while($n < strlen($string)) {
$t = ord($string[$n]);
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 <= 251) {
$tn = 5; $n += 5; $noc += 2;
} elseif($t == 252 || $t == 253) {
$tn = 6; $n += 6; $noc += 2;
} else {
$n++;
}
if($noc >= $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('&', '"', '<', '>'), array('&', '"', '<', '>'), $strcut);
return $strcut.$dot;
}
‘玖’ php截取一段字符 计算它的长度,多余的用“...”代替
function cut_str($sourcestr,$cutlength){
$returnstr='';
$i=0;
$n=0;
$str_length=strlen($sourcestr);//字符串的字节数
while (($n<$cutlength) and ($i<=$str_length))
{
$temp_str=substr($sourcestr,$i,1);
$ascnum=Ord($temp_str);//得到字符串中第$i位字符的ascii码
if ($ascnum>=224) //如果ASCII位高与224,
{
$returnstr=$returnstr.substr($sourcestr,$i,3); //根据UTF-8编码规范,将3个连续的字符计为单个字符
$i=$i+3; //实际Byte计为3
$n++; //字串长度计1
}
elseif ($ascnum>=192) //如果ASCII位高与192,
{
$returnstr=$returnstr.substr($sourcestr,$i,2); //根据UTF-8编码规范,将2个连续的字符计为单个字符
$i=$i+2; //实际Byte计为2
$n++; //字串长度计1
}
elseif ($ascnum>=65 && $ascnum<=90) //如果是大写字母,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //实际的Byte数仍计1个
$n++; //但考虑整体美观,大写字母计成一个高位字符
}
else //其他情况下,包括小写字母和半角标点符号,
{
$returnstr=$returnstr.substr($sourcestr,$i,1);
$i=$i+1; //实际的Byte数计1个
$n=$n+0.5; //小写字母和半角标点等与半个高位字符宽...
}
}
if ($str_length>$cutlength){
$returnstr = $returnstr."...";//超过长度时在尾处加上省略号
}
return $returnstr;
}
以上是函数,参数是相应字符串和该字符串长度,字符串的长度可以通过strlen函数获取!希望对你有帮助!
‘拾’ php里如何截取英文和汉字为相同字符长度
<?php
$str1="str字符串";
$str2="strstrstrstr";
$str3="字符串字符串字符串";
echo mb_substr($str1,0,3,'utf-8')."<br>";
echo mb_substr($str2,0,3,'utf-8')."<br>";
echo mb_substr($str3,0,3,'utf-8')."<br>";
?>
前提是你的页面编码也是utf-8