php取字符串长度(带标点 及数字)及取指写长度字符串问题 $neiron='你好呀,呵呵,还有1天就过生生日喽!';echo strlen($neiron).'<br><br>';echo substr($neiron,0,10).'<br><br>';输出结果为:32你好呀,呵?br>我想要的结果,输出字符串长度时,是无论是1个数字还是1个文字都按1计算,取指定长度字符串时也是如此 该用什么函数如何操作? 谢谢! 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 可以的话就用mb_系列$neiron='你好呀,呵呵,还有1天就过生生日喽!';echo mb_strlen($neiron,'utf-8').'<br><br>';echo mb_substr($neiron,0,10,'utf-8').'<br><br>'; if (function_exists('mb_substr')){ echo mb_substr($neiron, 0, 10, "utf-8");}else if(function_exists('iconv_substr')){ echo iconv_substr($neiron, 0, 10, "utf-8");} 可是结果还是不对呀.$neiron='你好呀,呵呵,还有1天就过生日喽!';echo $neiron.'<br><br>';echo mb_strlen($neiron,'utf-8').'<br><br>';echo mb_substr($neiron,0,10,'utf-8').'<br><br>';输出结果为:你好呀,呵呵,还有1天就过生日喽!18你好呀,呵呵,还计算字符数时候 为什么输出是18个字符 我怎么数也没数出18呀. 是17个字呀!就算是18 与我数的相差是1.可在取10个字符的时候为什么 输出我数是 8 个呀 与我数的又差两个了.不明白! //截取字符串function csubstr($str,$start,$len){ $strlen = strlen($str); $clen = 0; $tmpstr = ''; for($i = 0; $i < $strlen; $i++, $clen++){ if($clen >= $start+$len){ break; } if(ord(substr($str,$i,1)) > 0xa0){ if ($clen >= $start){ $tmpstr .= substr($str,$i,2); } $i++; }else{ if($clen >= $start){ $tmpstr .= substr($str,$i,1); } } } return $tmpstr;} 编码要统一你要把内容保存为utf-8格式或者是,"utf-8"改成你的编码,通常GBK 加第三个参数是提醒你,$neiron串须为utf-8编码。 如果$neiron串是gbk编码,就相应改成echo mb_strlen($neiron,'gbk').'<br><br>'; 五楼的 (妖言惑众) 解决了取指定长度字符串问题. 很厉害!五楼的朋友函数里面包含的的取字符串总长度的计算不是我想要的.得不出正确的结果.现在只剩一个问题了 取字符串总长度问题 谁在帮忙一下.$neiron='你好呀,呵呵,还有1天就过生日喽!';怎么计算出neiron是 17 个字符. $neiron = '你好呀,呵呵,还有1天就过生日喽!';echo $neiron.'<br><br>';echo iconv_strlen($neiron,'gbk').'<br><br>';echo iconv_substr($neiron,0,10,'gbk').'<br><br>';你好呀,呵呵,还有1天就过生日喽!17你好呀,呵呵,还有1*********$neiron = iconv('gbk', 'utf-8', '你好呀,呵呵,还有1天就过生日喽!');echo $neiron.'<br><br>';echo iconv_strlen($neiron,'utf-8').'<br><br>';echo iconv_substr($neiron,0,10,'utf-8').'<br><br>';你好呀,呵呵,还有1天就过生日喽!17你好呀,呵呵,还有1*****$neiron = iconv('gbk', 'utf-8', '你好呀,呵呵,还有1天就过生日喽!');echo $neiron.'<br><br>';echo mb_strlen($neiron,'utf-8').'<br><br>';echo mb_substr($neiron,0,10,'utf-8').'<br><br>';你好呀,呵呵,还有1天就过生日喽!17你好呀,呵呵,还有1 你如果使用#5的代码,请注意,此函数只适用于是GBK编码的情况。 <?php//截取字符串,带有汉字类型,一个汉字类型的长度为1function sub_string($str = '', $start = 0, $sublen = 0){ if(strlen($str) == 0){ echo 'function sub_string param is null';exit; } $l = strlen('测'); $char_type = 'utf-8'; if($l == 2){ $char_type = 'gbk'; } $str = mb_substr($str, $start, $sublen, $char_type); return $str;}//获取字符串的长度,包含汉字,每个汉字类型的长度为1function get_str_len($str = ''){ if(strlen($str) == 0){ echo 'function get_str_len param is null';exit; } $l = strlen('测'); $char_type = 'utf-8'; if($l == 2){ $char_type = 'gbk'; } $strlen = mb_strlen($str, $char_type); return $strlen;}$s = '你好呀,呵呵,还有1天就过生日喽!';$l = get_str_len($s);echo $l?>不过什么编码通用 向唠叨哥请教 多条记录上传 新型ORM queryphp框架 操作类似jquery方式 PHP中关于登录成功后更新最后登录信息的问题 WebBrowser.ExecWB 那用于FireFOX吗 使用adodb如何操作存储过程? 在php中,如何能够播放影片,音乐,DVD短片等? 请问如何使用正则表达式 求助,发送邮件,如何发送php动态生成的文件的 求指教,求第二大的数 请问要写个程序列出目录下的所有文件,要怎么写? php联接多个数据库的问题
$neiron='你好呀,呵呵,还有1天就过生生日喽!';
echo mb_strlen($neiron,'utf-8').'<br><br>';
echo mb_substr($neiron,0,10,'utf-8').'<br><br>';
{
echo mb_substr($neiron, 0, 10, "utf-8");
}
else if(function_exists('iconv_substr'))
{
echo iconv_substr($neiron, 0, 10, "utf-8");
}
echo $neiron.'<br><br>';
echo mb_strlen($neiron,'utf-8').'<br><br>';
echo mb_substr($neiron,0,10,'utf-8').'<br><br>';输出结果为:你好呀,呵呵,还有1天就过生日喽!18你好呀,呵呵,还计算字符数时候 为什么输出是18个字符 我怎么数也没数出18呀. 是17个字呀!
就算是18 与我数的相差是1.
可在取10个字符的时候为什么 输出我数是 8 个呀
与我数的又差两个了.
不明白!
//截取字符串
function csubstr($str,$start,$len)
{
$strlen = strlen($str);
$clen = 0;
$tmpstr = '';
for($i = 0; $i < $strlen; $i++, $clen++){
if($clen >= $start+$len){
break;
}
if(ord(substr($str,$i,1)) > 0xa0){
if ($clen >= $start){
$tmpstr .= substr($str,$i,2);
}
$i++;
}else{
if($clen >= $start){
$tmpstr .= substr($str,$i,1);
}
}
}
return $tmpstr;
}
或者是,"utf-8"改成你的编码,通常GBK
echo mb_strlen($neiron,'gbk').'<br><br>';
echo $neiron.'<br><br>';
echo iconv_strlen($neiron,'gbk').'<br><br>';
echo iconv_substr($neiron,0,10,'gbk').'<br><br>';你好呀,呵呵,还有1天就过生日喽!17你好呀,呵呵,还有1*********$neiron = iconv('gbk', 'utf-8', '你好呀,呵呵,还有1天就过生日喽!');
echo $neiron.'<br><br>';
echo iconv_strlen($neiron,'utf-8').'<br><br>';
echo iconv_substr($neiron,0,10,'utf-8').'<br><br>';你好呀,呵呵,还有1天就过生日喽!17你好呀,呵呵,还有1*****
$neiron = iconv('gbk', 'utf-8', '你好呀,呵呵,还有1天就过生日喽!');
echo $neiron.'<br><br>';
echo mb_strlen($neiron,'utf-8').'<br><br>';
echo mb_substr($neiron,0,10,'utf-8').'<br><br>';你好呀,呵呵,还有1天就过生日喽!17你好呀,呵呵,还有1
<?php
//截取字符串,带有汉字类型,一个汉字类型的长度为1
function sub_string($str = '', $start = 0, $sublen = 0){
if(strlen($str) == 0){
echo 'function sub_string param is null';exit;
}
$l = strlen('测');
$char_type = 'utf-8';
if($l == 2){
$char_type = 'gbk';
}
$str = mb_substr($str, $start, $sublen, $char_type);
return $str;
}//获取字符串的长度,包含汉字,每个汉字类型的长度为1
function get_str_len($str = ''){
if(strlen($str) == 0){
echo 'function get_str_len param is null';exit;
}
$l = strlen('测');
$char_type = 'utf-8';
if($l == 2){
$char_type = 'gbk';
}
$strlen = mb_strlen($str, $char_type);
return $strlen;
}
$s = '你好呀,呵呵,还有1天就过生日喽!';
$l = get_str_len($s);
echo $l?>不过什么编码通用