日本搞逼视频_黄色一级片免费在线观看_色99久久_性明星video另类hd_欧美77_综合在线视频

國內(nèi)最全I(xiàn)T社區(qū)平臺 聯(lián)系我們 | 收藏本站
阿里云優(yōu)惠2
您當(dāng)前位置:首頁 > php開源 > DedeCMS > DedeCMS提示你訪問的用戶可能已經(jīng)被刪除的問題

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

來源:程序員人生   發(fā)布時間:2013-10-25 21:00:55 閱讀次數(shù):3892次

【問題描述】

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

又看到網(wǎng)(LieHuo.Net)教程中發(fā)布的文章提到的在保留uid訪問方式同時增加mid訪問的方法,經(jīng)過實(shí)驗(yàn)問題依然存在。網(wǎng)教程中提到將“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'];
}
}
}
分析這兩段代碼,網(wǎng)提出的代碼中增加了從數(shù)據(jù)庫中重新讀出用戶ID的內(nèi)容重新給uid傳遞一個值,但是把源程序中用于判斷uid值是否UTF8編碼格式的內(nèi)容給丟了。這樣的修改大概可以解決同時出現(xiàn)了uid、mid兩個訪問參數(shù)撞車時的問題,但是依然解決不了UTF8編碼漢字用戶名的問題。

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

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

【解決方法】

在網(wǎng)絡(luò)上搜索了一些關(guān)于UTF8編碼判斷的代碼,找到了一個用PHP編寫的判斷函數(shù)。將此名為isUTF8($str)的函數(shù)添加在“memberconfig.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]

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

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

此方法測試環(huán)境:Windows2003服務(wù)器+Essamp2.0+XPSp3客戶機(jī)+世界之窗瀏覽器。

生活不易,碼農(nóng)辛苦
如果您覺得本網(wǎng)站對您的學(xué)習(xí)有所幫助,可以手機(jī)掃描二維碼進(jìn)行捐贈
程序員人生
------分隔線----------------------------
分享到:
------分隔線----------------------------
關(guān)閉
程序員人生
主站蜘蛛池模板: 日本精品视频网站 | 日韩免费 | 国产在线拍 | 五月婷婷在线播放 | 日韩一区二区三区精品视频 | 免费成人黄色 | 久久6热视频 | 欧美精品一级片 | 国产一区二区三区不卡在线观看 | 欧美 日韩 国产在线 | 久久这里都是精品 | 国产精品久久久久久一级毛片 | 麻豆精品国产 | 久草在线视频免赞 | 精品1区2区 | 成人免费av在线 | 91亚洲国产视频 | 国产一区久久久 | 国产小视频在线播放 | 精品一区二区国产 | 久久久精品日韩 | 国产综合视频在线观看 | 午夜性久久| 黄色毛片免费看 | 毛片基地黄久久久久久天堂 | 欧美日韩综合在线 | 日本精品视频一区二区三区四区 | 黄色在线观看视频网站 | 久久精品一区二区三区不卡牛牛 | 久久久久久久久久久久久久久久久久久久 | 久久久午夜视频 | 日韩成人在线观看 | 精品不卡 | 精品在线视频观看 | 让男人欲仙欲死的床技 | 亚洲毛片视频 | 九九精品视频在线观看 | 午夜日韩 | 亚洲精品久久久久久一区二区 | 国产精品99久久久久 | 97久久久久久久久 |