中文截取无乱码、 顺序查找和二分查找函数
来源:互联网 发布:小学生画图软件 编辑:程序博客网 时间:2024/05/18 01:32
共两种方法,第一种比较全面,第二种方法比较精简(只适合中文和ANSI字符的截取)
第一种,比较全面:
function utf8SubFix($str,$start,$len){
$strlen=strlen($str);
if(!$len||$len<=0||$len<$start){
echo '参数错误';
return false;
}
if($strlen<$len){
$len=$strlen;
}
$offset=0;
$chars=0;
$res='';
while(($chars-$start)!=$len){
$high=decbin(ord(substr($str,$offset,1)));
if(strlen($high)<8){
$count=1;
}else if(strcmp($high & '11100000',11000000)==0){
$count=2;
}else if(strcmp($high & '11110000',11100000)==0){
$count=3;
}else if(strcmp($high&'11111000','11110000')==0){
$count=4;
}else if(strcmp($high&'11111100','11111000')==0){
$count=5;
}else if(strcmp($high&'11111110',11111100)==0){
$count=6;
}else{
echo "default";
echo ($high & '111100000');
echo "<br>";
}
if($start<=$chars){
$res.=substr($str,$offset,$count);
}
$chars+=1;
$offset+=$count;
//echo "<br>".$high;
}
return $res;
}
第二种,比较精简,只适合中文和ANSI字符的截取
function mixSubstr($str, $length, $start=FALSE)
{
$strlen = strlen($str);
if( $length<=0||!$length||($start >= $strlen)){
return false;
}
if($length > $strlen) {
$length = $strlen;
}
$content = '';
$sing = 0;
$count = 0;
//截取开始,中文字符占用3个字,所以从第一个开始依次判断,大于0xa0则开始截取三个字,小于则只截取一个
//只针对中文有效,或者字符占3个字的文字
while($length != ($count-$start))
{
if(ord($str[$sing]) > 0xa0) {
if(!$start || $start <= $count) {
$content .= $str[$sing].$str[$sing+1].$str[$sing+2];
}
$sing += 3;
$count++;
}else{
if(!$start || $start <= $count) {
$content .= $str[$sing];
}
$sing++;
$count++;
}
}
return $content;
第一种,比较全面:
function utf8SubFix($str,$start,$len){
$strlen=strlen($str);
if(!$len||$len<=0||$len<$start){
echo '参数错误';
return false;
}
if($strlen<$len){
$len=$strlen;
}
$offset=0;
$chars=0;
$res='';
while(($chars-$start)!=$len){
$high=decbin(ord(substr($str,$offset,1)));
if(strlen($high)<8){
$count=1;
}else if(strcmp($high & '11100000',11000000)==0){
$count=2;
}else if(strcmp($high & '11110000',11100000)==0){
$count=3;
}else if(strcmp($high&'11111000','11110000')==0){
$count=4;
}else if(strcmp($high&'11111100','11111000')==0){
$count=5;
}else if(strcmp($high&'11111110',11111100)==0){
$count=6;
}else{
echo "default";
echo ($high & '111100000');
echo "<br>";
}
if($start<=$chars){
$res.=substr($str,$offset,$count);
}
$chars+=1;
$offset+=$count;
//echo "<br>".$high;
}
return $res;
}
第二种,比较精简,只适合中文和ANSI字符的截取
function mixSubstr($str, $length, $start=FALSE)
{
$strlen = strlen($str);
if( $length<=0||!$length||($start >= $strlen)){
return false;
}
if($length > $strlen) {
$length = $strlen;
}
$content = '';
$sing = 0;
$count = 0;
//截取开始,中文字符占用3个字,所以从第一个开始依次判断,大于0xa0则开始截取三个字,小于则只截取一个
//只针对中文有效,或者字符占3个字的文字
while($length != ($count-$start))
{
if(ord($str[$sing]) > 0xa0) {
if(!$start || $start <= $count) {
$content .= $str[$sing].$str[$sing+1].$str[$sing+2];
}
$sing += 3;
$count++;
}else{
if(!$start || $start <= $count) {
$content .= $str[$sing];
}
$sing++;
$count++;
}
}
return $content;
}
- //顺序查找(数组里查找某个元素)
- function seq_sch($array, $n, $k){
- $array[$n] = $k;
- for($i=0; $i<$n; $i++){
- if($array[$i]==$k){
- break;
- }
- }
- if ($i<$n){
- return $i;
- }else{
- return -1;
- }
- }
- function binaryfind($arr, $findVal, $lindex, $rindex) {
-
- if ($lindex <= $rindex) {
- $mindex = floor(($rindex + $lindex) / 2);
- } else {
- return -1; //找不到,返回-1
- }
- if ($findVal == $arr[$mindex]) {
- return $mindex;
- } else if ($findVal > $arr[$mindex]) {
- $lindex = $mindex + 1;
- return binaryfind($arr, $findVal, $lindex, $rindex);
- } else if ($findVal < $arr[$mindex]) {
- $rindex = $mindex - 1;
- return binaryfind($arr, $findVal, $lindex, $rindex);
- }
- }
- 中文截取无乱码、 顺序查找和二分查找函数
- 顺序查找和二分查找
- 二分查找和顺序查找
- 顺序查找和二分查找
- 顺序查找和二分查找
- 顺序查找和二分查找
- 顺序查找,二分查找
- 顺序查找、二分查找
- 顺序查找,二分查找
- 二分查找,顺序查找
- 顺序查找 & 二分查找
- 二分查找法和顺序查找法
- java实现顺序查找和二分查找
- 顺序查找算法和二分查找算法
- 顺序查找和二分查找算法
- php:顺序查找和二分查找
- C语言:顺序查找和二分查找
- 搜索算法-顺序查找和二分查找
- 从C到C++
- request.getParameter request.getParameterNames request.getParameterValues
- HttpWebRequest模拟POST提交防止中文乱码
- windows通过GPRS模块拨号上网流程
- <<SAP内存计算——HANA>> 书评
- 中文截取无乱码、 顺序查找和二分查找函数
- 黑马程序员------Java中单例模式的见解及其应用
- Nginx tcp proxy module试用
- ubuntukylin 13.04下配置android真机调试
- sqlserver常出现的简单小问题
- Android 两Activity之间动画效果(2)---------移动效果
- 与孩子一起学编程07章
- 在安装ia32-libs遇到的问题
- plist字段列表及CFBundleVersion与CFBundleShortVersionString