ホームページ >バックエンド開発 >PHPチュートリアル >文字セットを設定しても文字化けが起こるのはなぜですか?

文字セットを設定しても文字化けが起こるのはなぜですか?

WBOY
WBOYオリジナル
2016-06-23 14:27:07886ブラウズ

文字セットを設定しても文字化けが発生します

$load_list は user_name の値の最初の 2 文字を取り出してアスタリスクに置き換えます。まだ文字化けしていますが、最初の 2 文字は中国語で表示され、その後にアスタリスクが続く必要があります
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; $k<$len; $k++){  if($k>1) {    $t .= '*';  }else {   $t .= mb_substr($temp, $k, 1);  }}echo $t;
の判断*****


この書き方によれば、なぜforeach ループ $v['user_name'] の数値は 1 つ少ないですか? ?

foreach($load_list as $k=>&$v){
//print_r($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 if($k>2) {
$t .= ' * ';
}else {
$t .= mb_substr($temp, $k, 1);
}
}
$t=&$v['user_name'] }

なぜ 1 つ少ないのですか何度も失敗しましたが、本当にうまくいかなかったので、助けを求めに来ました
echobase64_encode($v['user_name']);
結果を投稿してください!

問題の現場を教えてもらえない場合、どうやって原因を知ることができますか?

$load_list は 2 次元配列で、$v['user_name'] には次のデータが含まれます

xiaodg,x42466,etea,na0617,kimo,LVIANG,vian22,qingyu,jiangliman,xiaobu,xiaobu,hfa818, 2 つの文字を * に置き換えます。 * を実装するコードは次のとおりです。

foreach($load_list as $k=>&$v){
//print_r($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 = ''; $ k++){
if($k>2) {
$t .= '*' }else {
$t .= mb_substr($temp, $k, 1) }
}
$t=& $v[ 'user_name'];

}

これは代入です:
$GLOBALS['tmpl']->assign("load_list",$load_list); 次に、samrty を使用してそれをページに表示します。 :
{foreach from= "$load_list" item="load"}
a34de1251f0d9fe1e645927f19a896e8
b6c5a531a458a2e790c1fd6421739d1c
b90dd5946f0946207856a8a37f441edf

;結果は、xiaodg が消え、2 番目の 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***        ))


モデレータ、ありがとう、私は自分でたくさんのデバッグとテストを行い、アルゴリズムを自分で書きました。結局、結果が不合格だったので、フォーラムに投稿することにしました。モデレーターの丁寧な指導に感謝します。ありがとうございました。 !

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。