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?>不过什么编码通用 写mysql_connect()就报http 500 服务器错误,但apache和mysql服务都启动正常 手机端网站开发 google地图 PHP删除替换指定整行的内容 缓冲区静态页 是这样的? 怎样在PHP页面进行操作,备份mysql数据库阿? 关于【NuSOAP】的问题 请高手帮忙看一下代码 寻找PHP高手!!!! iframe内嵌,,弹出窗口“Not Found“,怎么处理掉弹窗,或者跳转 关于微信扫描支付的问题 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?>不过什么编码通用