当前位置:Gxlcms > PHP教程 > 设置字符集后怎么还乱码

设置字符集后怎么还乱码

时间:2021-07-01 10:21:17 帮助过:7人阅读

设置字符集后还乱码

$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<$len;$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; $k<$len; $k++){  if($k>1) {    $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<$len; $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<$len; $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; $k<$len; $k++){    if($k>2) {      $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***        ))

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

人气教程排行