<?phpheader("content-type:text/html;charset=gbk");$str="j这是ces测试dkfjdksj";function substr_gbk($str,$start,$end){ $temp=""; for($i=$start;$i<=$end;$i++) { if(ord($str{$i})>0xa0) { $temp.=substr($str,$i,2); $i++; }else { $temp.=substr($str,$i,1); } } return $temp;}echo substr_gbk($str,1,10); //从高字节截取正常echo substr_gbk($str,2,10); //从低字节截取出现乱码?>
$str="j这是ces测试dkfjdksj"; function substr_gbk($str,$start,$end){ $temp=""; for($i=0; $i<$start; $i++) if(ord($str{$i})>0xa0) $i++; //加上这行 for(;$i<=$end;$i++) { if(ord($str{$i})>0xa0) { $temp.=substr($str,$i,2); $i++; }else { $temp.=substr($str,$i,1); } } return $temp;} echo substr_gbk($str,1,10); //这是ces测试echo substr_gbk($str,2,10); //是ces测试
0xa0 を決定する基準は何ですか?
gb2312 バイトの内部コードは 0xa1 から始まります
0xa0 を決定する基準は何ですか? 0xa1から始まることはまだ文字化けされています。 0xa0 の決定とは何ですか?
gb2312 バイトの内部コードは 0xa1 から始まります
0xa0 を設定する基準は何ですか?
さて、ボス、この問題については心配しないでください。下位バイトがインターセプトされたかどうかを判断する方法を教えていただけますか? ありがとうございます
アルゴリズムを勉強しているのかと思いました、mb_substr を使用してください
これを試してみましたが、うまくいきませんでした
試してみてください
<?phpheader("content-type:text/html;charset=gbk");$str="c这是ces测试dkfjdksa";function substr_gbk($str,$start,$end){ for($i=0;$i<strlen($str);$i++) { if(ord(substr($str,$i,1))>0xa0) { $temp[]=substr($str,$i,2); $i++; }else { $temp[]=substr($str,$i,1); } } return implode("",array_slice($temp,$start,$end));}print_r(substr_gbk($str,0,3));?>