花魁直播高品质美女在线视频互动社区 - 花魁直播官方版

 歡迎來(lái)到素材無(wú)憂網(wǎng),按 + 收藏我們
登錄 注冊(cè) 退出 找回密碼

DedeCMS提示你訪問的用戶可能已經(jīng)被刪除的問題

時(shí)間: 2018-12-09 20:40 閱讀: 作者:素材無(wú)憂網(wǎng)

【問題描述】

當(dāng)前使用的版本是DedeCMS V5.5的UTF8版本。庫(kù)中已經(jīng)注冊(cè)了若干用戶,從問答模塊點(diǎn)擊某用戶名時(shí)卻無(wú)法進(jìn)入其個(gè)人空間,顯示“你訪問的用戶可能已經(jīng)被刪除!”提示。依次檢查所有用戶,并非所有漢字名用戶不能用,個(gè)別可用的用戶名完全無(wú)規(guī)律可循,即便出現(xiàn)了錯(cuò)誤的漢字用戶名如果將其連接輸入在瀏覽器的地址欄中,卻能夠正常的打開。 
在網(wǎng)絡(luò)上尋找錯(cuò)誤解決方法,發(fā)現(xiàn)Dede官網(wǎng)中提出此問題的人很多,而且從5.3開始就一直存在這個(gè)問題,有個(gè)別朋友提出的底層解決方案,修改空間模版中“..\member\space\company”文件夾下的index.htm, introduce.htm, listshop.htm, contact.htm, guestbook.htm 五個(gè)文件中<a href="/main/?uid=company&action=products&mtype={dede:value.mtypeid/}" target="_blank">{dede:value.mtypename/}</a>語(yǔ)句的company替換為{dede:var.userid_e /}變量的方法,經(jīng)過實(shí)驗(yàn)并沒有解決問題。

又看到網(wǎng)上教程中發(fā)布的文章提到的在保留uid訪問方式同時(shí)增加mid訪問的方法,經(jīng)過實(shí)驗(yàn)問題依然存在。教程中提到將“member/index.php”文件中的 

if(empty($uid)) 
{ 
    $uid = ''; 
} 
else 
{ 
    $tmpstr = @gb2utf8($uid); 
    $tmpstr2 = @utf82gb($tmpstr); 
    if($tmpstr2==$uid) $uid = $tmpstr; 
}

代碼更改為 

if(empty($uid)) 
{ 
    if (empty($_REQUEST['mid'])) 
    { 
        $uid = ''; 
    }else{ 
        $uid=$dsql->GetOne("Select userid From `dede_member` where mid='".$_REQUEST['mid']."'; "); 
        if (!is_array($uid)){ 
            $uid=''; 
        }else{ 
            $uid=$uid['userid']; 
        } 
    } 
}

分析這兩段代碼,織夢(mèng)無(wú)憂小編提出的代碼中增加了從數(shù)據(jù)庫(kù)中重新讀出用戶ID的內(nèi)容重新給uid傳遞一個(gè)值,但是把源程序中用于判斷uid值是否UTF8編碼格式的內(nèi)容給丟了。這樣的修改大概可以解決同時(shí)出現(xiàn)了uid、mid兩個(gè)訪問參數(shù)撞車時(shí)的問題,但是依然解決不了UTF8編碼漢字用戶名的問題。

還有些網(wǎng)友干脆認(rèn)真提出方案限制用戶使用漢字名注冊(cè),方法相當(dāng)詳備。不過如果使用UTF8編碼就放棄漢字用戶名注冊(cè)未免有點(diǎn)說不過去了,這里就不再詳轉(zhuǎn)具體方法了。

【問題分析】  從故障的現(xiàn)象看,應(yīng)該是在判斷uid值是出現(xiàn)了錯(cuò)誤,導(dǎo)致系統(tǒng)無(wú)法識(shí)別用戶,仔細(xì)分析官方代碼中對(duì)于漢字UTF8編碼的uid判斷語(yǔ)句,是利用了GB2UTF8和UTF82GB兩個(gè)函數(shù)進(jìn)行兩次轉(zhuǎn)換然后判斷代碼。在網(wǎng)上找了關(guān)于UTF8和GB編碼的判斷問題,發(fā)現(xiàn)其實(shí)遠(yuǎn)遠(yuǎn)不是這么簡(jiǎn)單的事兒。在GB編碼和UTF8編碼中,存在著部分漢字編碼是相同或某部分字節(jié)相同的情況,這樣利用兩次轉(zhuǎn)換的方法判斷編碼是很不準(zhǔn)確的,于是出現(xiàn)了沒有重碼的漢字用戶名可以正確判斷并使用,而出現(xiàn)重碼的漢字名不能正確判斷,發(fā)生了“你訪問的用戶可能已經(jīng)被刪除!”錯(cuò)誤。

【解決方法】

在網(wǎng)絡(luò)上搜索了一些關(guān)于UTF8編碼判斷的代碼,找到了一個(gè)用PHP編寫的判斷函數(shù)。將此名為isUTF8($str)的函數(shù)添加在“member\config.php”文件的最后: 

[php] 
function isUTF8($str){ 
    $length=strlen($str); 
    for($i=0;$i<$length;$i++){ 
        $high=ord($str{$i}); 
        if(($high==0xC0)||($high==0xC1)){ 
            return false; 
        }elseif($high<0x80){ 
            continue; 
        }elseif($high<0xC0){ 
            return false; 
        }elseif($high<0xE0){ 
            if(++$i>=$length) 
                return true; 
            elseif(($str{$i}&"\xC0")=="\x80") 
                continue; 
        }elseif($high<0xF0){ 
            if(++$i>=$length){ 
                return true; 
            }elseif(($str{$i}&"\xC0")=="\x80"){ 
                if(++$i>=$length) 
                    return true; 
                elseif(($str{$i}&"\xC0")=="\x80") 
                    continue; 
            } 
        }elseif($high<0xF5){ 
            if(++$i>=$length){ 
                return true; 
            }elseif(($str{$i}&"\xC0")=="\x80"){ 
                if(++$i>=$length){ 
                    return true; 
                }elseif(($str{$i}&"\xC0")=="\x80"){ 
                    if(++$i>=$length) 
                        return true; 
                    elseif(($str{$i}&"\xC0")=="\x80") 
                        continue; 
                } 
            } 
        } 
        return false; 
    } 
    return true; 
} 
[/php]

并修改“member\index.php”中的代碼:將  $tmpstr = @gb2utf8($uid);  $tmpstr2 = @utf82gb($tmpstr);  if($tmpstr2==$uid) $uid = $tmpstr;  修改為  if(!isUTF8($uid)) $uid = @gb2utf8($uid);  故障排除。

這里僅對(duì)官方代碼中判斷用戶UTF8編碼的方法進(jìn)行了修改,并沒有對(duì)織夢(mèng)無(wú)憂小編提出的mid參數(shù)問題進(jìn)行修改,若出現(xiàn)了織夢(mèng)無(wú)憂小編提出的故障現(xiàn)象相信他們提到的方法是不錯(cuò)的解決方案。此文已扼要列出了織夢(mèng)無(wú)憂小編的方法備考。 

版權(quán)聲明: 本站資源均來(lái)自互聯(lián)網(wǎng)或會(huì)員發(fā)布,如果侵犯了您的權(quán)益請(qǐng)與我們聯(lián)系,我們將在24小時(shí)內(nèi)刪除!謝謝!

轉(zhuǎn)載請(qǐng)注明: DedeCMS提示你訪問的用戶可能已經(jīng)被刪除的問題

標(biāo)簽:  
相關(guān)文章
模板推薦