用php截取字符串 $a="我是我是啊";//OKecho substr($a,0,1);echo substr($a,0,2);echo substr($a,0,3);echo substr($a,0,4);//unableecho substr($a,3,5); 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 //mb_internal_encoding("UTF-8");//你的编码 $s = "中文中文字符"; echo mb_substr($s,1,1,'UTF-8'); //截取中文字符串function mysubstr($str, $start, $len) { $tmpstr = ""; $strlen = $start + $len; for($i = 0; $i < $strlen; $i++) { if(ord(substr($str, $i, 1)) > 0xa0) { $tmpstr .= substr($str, $i, 2); $i++; } else $tmpstr .= substr($str, $i, 1); } return $tmpstr;} $str="一1二2三3四4五5六6七7";echo mb_substr($str, 0, 1, 'utf-8');不过也不是万能的,在第三个参数为3的时候,也出现乱码了.最好自己写个函数.来处理这种情况. 还没听说过,手册上明确指出mb_substr,对多字节是安全的,如果还出现乱码,检查编码,替换 UTF-8 那个参数,楼主还是下个手册翻翻把,总是要下的…… 我以前做java的时候解决过这个问题,但是也是很复杂,由于我不太熟悉php,各种函数都没学过那时我的关键解决思路是获得$str的字节数组java的代码是byte[] byteStr = str.getBytes();如果str = "中国人";那么所获得的数组byteStr就有6个byte类型的元素,byteStr[0]和byteStr[1]代表的就是“中”这个字for(int i=0; i < str.length();i++) { //str.length()在这里返回3 String tempStr = str.charAt(i); //3次循环中,分别返回“中”,“国”,“人”。 byte[] b = tempStr.getBytes(); if(b.length == 1){ //说明是单字节 }else{ //说明是两个字节,或两个字节以上 }}我用java能解决,但是php由于是初学,根本不知道各种函数的用法希望大家能根据我的思路,把java代码翻译成php的代码 不是把,这样都行,你在csdn下载频道搜索 php5中文手册把……还有你还乱码,在之前发送个header头看看,此外你那个php文件保存的时候 是什么编码如果保存 ansi,发送 gb2312之类,如果UTF-8,就发送UTF-8或者之前用iconv转换编码<?header('Content-Type: text/html; charset=UTF-8');$s = "中文中文字符"; echo mb_substr($s,1,1,'UTF-8'); ?>或者<?header('Content-Type: text/html; charset=UTF-8');//虽然你文件本身保存的是ansi,但是输出头是UTF-8$str="一1二2三3四4五5六6七7"; $str=iconv('gb2312','UTF-8',$str);//那么把gb2312,或gbk之类的,用iconv转换成UTF-8echo mb_substr($str, 0, 3,'UTF-8'); //最终你用 mb_substr带入 UTF-8,还是正确的?> apache 端口问题 如何格式化时间? 一个验证码的问题,请教 怎么接收name和age得值 请教一个简单的php+mysql+appserv做的查询 MySQL的VARCHAR字段的问题 smarty的问题,如何选择多个checkbox值? div+css 中宽度不明水平居中 急!急!急!急! 有朋友使用Drupal吗?请教一个问题 linux下的php路径执行问题 小菜问题....!关于循环! 动态网页表单的内容输入和调教的问题
$s = "中文中文字符";
echo mb_substr($s,1,1,'UTF-8');
//截取中文字符串
function mysubstr($str, $start, $len) {
$tmpstr = "";
$strlen = $start + $len;
for($i = 0; $i < $strlen; $i++) {
if(ord(substr($str, $i, 1)) > 0xa0) {
$tmpstr .= substr($str, $i, 2);
$i++;
} else
$tmpstr .= substr($str, $i, 1);
}
return $tmpstr;
}
echo mb_substr($str, 0, 1, 'utf-8');不过也不是万能的,在第三个参数为3的时候,也出现乱码了.
最好自己写个函数.来处理这种情况.
如果还出现乱码,检查编码,替换 UTF-8 那个参数,楼主还是下个手册翻翻把,总是要下的……
那时我的关键解决思路是
获得$str的字节数组java的代码是byte[] byteStr = str.getBytes();
如果str = "中国人";
那么所获得的数组byteStr就有6个byte类型的元素,byteStr[0]和byteStr[1]代表的就是“中”这个字
for(int i=0; i < str.length();i++) { //str.length()在这里返回3
String tempStr = str.charAt(i); //3次循环中,分别返回“中”,“国”,“人”。
byte[] b = tempStr.getBytes();
if(b.length == 1){
//说明是单字节
}else{
//说明是两个字节,或两个字节以上
}
}我用java能解决,但是php由于是初学,根本不知道各种函数的用法
希望大家能根据我的思路,把java代码翻译成php的代码
还有你还乱码,在之前发送个header头看看,此外你那个php文件保存的时候 是什么编码
如果保存 ansi,发送 gb2312之类,如果UTF-8,就发送UTF-8
或者之前用iconv转换编码<?
header('Content-Type: text/html; charset=UTF-8');$s = "中文中文字符";
echo mb_substr($s,1,1,'UTF-8');
?>或者<?
header('Content-Type: text/html; charset=UTF-8');//虽然你文件本身保存的是ansi,但是输出头是UTF-8$str="一1二2三3四4五5六6七7"; $str=iconv('gb2312','UTF-8',$str);//那么把gb2312,或gbk之类的,用iconv转换成UTF-8echo mb_substr($str, 0, 3,'UTF-8'); //最终你用 mb_substr带入 UTF-8,还是正确的
?>