ホームページ >バックエンド開発 >PHPチュートリアル >文字セットを設定しても文字化けが起こるのはなぜですか?
文字セットを設定しても文字化けが発生します
$load_list は user_name の値の最初の 2 文字を取り出してアスタリスクに置き換えます。まだ文字化けしていますが、最初の 2 文字は中国語で表示され、その後にアスタリスクが続く必要があります$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($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'] には次のデータが含まれます
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*** ))