欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  后端开发

设置字符集后怎么还乱码

程序员文章站 2022-06-15 17:58:17
...
设置字符集后还乱码 $load_list 是一个二维数组,将其中的user_name值取出前两个字符,后面用星号代替,但是设置字符集后还是有乱码,但是中文是要显示前两个字符,后面用星号表示
foreach($load_list as $k=>&$v){

$temp=&$v['user_name'];
//判断是否有中文
if (!preg_match('/^([\x81-\xfe][\x40-\xfe]){0,2}$/',$temp)){
$len=mb_strlen($temp,'utf-8');
}else{
$len=strlen($temp);
}
for($k=0;$k if($k>1){
$temp[$k]='*';
}

回复讨论(解决方案)

$temp = '判断是否有中文';//判断是否有中文if(preg_match('/[\x81-\xfe][\x40-\xfe]/',$temp)){  mb_internal_encoding("gbk");}else {  mb_internal_encoding("utf-8");}$len = mb_strlen($temp);$t = '';for($k=0; $k1) {    $t .= '*';  }else {   $t .= mb_substr($temp, $k, 1);  }}echo $t;
判断*****

按照这种写法,为什么foreach循环$v['user_name']会少一个数??
foreach($load_list as $k=>&$v){
//print_r($v);
//exit;
$temp=$v['user_name'];

//判断是否有中文
if(preg_match('/[\x81-\xfe][\x40-\xfe]/',$temp)){
mb_internal_encoding("gbk");
}else {
mb_internal_encoding("utf-8");
}
$len = mb_strlen($temp);
$t = '';
for($k=0; $k if($k>2) {
$t .= '*';
}else {
$t .= mb_substr($temp, $k, 1);
}
}
$t=&$v['user_name'];

}

为什么会少一个数了,测试很多遍都不行,实在不行了,才来求助

echo base64_encode($v['user_name']);
贴出结果!

你不给出问题现场,如何知道是什么原因?

$load_list是一个二维数组,其中的$v['user_name']有以下数据
xiaodg,x42466,etea,na0617,kimo,留影,vian22,qingyu,jiangliman,xiaobu,xiaobu,hfa818,实现的结果将两个字符后面的用*代替,下面是实现*代码,
foreach($load_list as $k=>&$v){
//print_r($v);
//exit;
$temp=$v['user_name'];

//判断是否有中文
if(preg_match('/[\x81-\xfe][\x40-\xfe]/',$temp)){
mb_internal_encoding("gbk");
}else {
mb_internal_encoding("utf-8");
}
$len = mb_strlen($temp);
$t = '';
for($k=0; $k if($k>2) {
$t .= '*';
}else {
$t .= mb_substr($temp, $k, 1);
}
}
$t=&$v['user_name'];

}

这是assign赋值:
$GLOBALS['tmpl']->assign("load_list",$load_list);

然后在页面用samrty显示:
{foreach from="$load_list" item="load"}



{$load.user_name}



但是显示的结果是xiaodg没有了,从第二个x42466开始显示
这是结果图:

第一个数没有了

你自己写错了,不能怪算法!
$t=&$v['user_name'];
应该是 $v['user_name'] = $t;

$load_list =array(  array('user_name' => 'xiaodg'),  array('user_name' => 'x42466'),  array('user_name' => 'etea'),  array('user_name' => 'na0617'),  array('user_name' => 'kimo'),  array('user_name' => '留影'),  array('user_name' => 'vian22'),  array('user_name' => 'qingyu'),  array('user_name' => 'jiangliman'),  array('user_name' => 'xiaobu'),  array('user_name' => 'xiaobu'),  array('user_name' => 'hfa818'),);foreach($load_list as $k=>&$v){  $temp=$v['user_name'];  //判断是否有中文  if(preg_match('/[\x81-\xfe][\x40-\xfe]/',$temp)){    mb_internal_encoding("gbk");  }else {    mb_internal_encoding("utf-8");  }  $len = mb_strlen($temp);  $t = '';  for($k=0; $k2) {      $t .= '*';    }else {      $t .= mb_substr($temp, $k, 1);    }  }  $v['user_name'] = $t;}print_r($load_list);
Array(    [0] => Array        (            [user_name] => xia***        )    [1] => Array        (            [user_name] => x42***        )    [2] => Array        (            [user_name] => ete*        )    [3] => Array        (            [user_name] => na0***        )    [4] => Array        (            [user_name] => kim*        )    [5] => Array        (            [user_name] => 留影        )    [6] => Array        (            [user_name] => via***        )    [7] => Array        (            [user_name] => qin***        )    [8] => Array        (            [user_name] => jia*******        )    [9] => Array        (            [user_name] => xia***        )    [10] => Array        (            [user_name] => xia***        )    [11] => Array        (            [user_name] => hfa***        ))

谢谢版主,我自己调试测试了很多,自己也写了算法,终究是结果不成功,才来论坛发帖,感谢版主细心指导,谢谢!!