dedecms, 提示, 访问, 用户, 可能
【问题描述】当前使用的版本是DedeCMSV5.5的UTF8版本。 库中已经注册了若干用户,从问答模块点击某用户名时却无法进入其个人空间,显示“您访问的用户可能已经被删除! ”提示。 依次检查所有用户,并非所有汉字名用户不能用,个别可用的用户名完全无规律可循,即便出现了错误的汉字用户名如果将其连接输入在浏览器的地址栏中,却能够正常的打开。 在网络上寻找错误解决具体的方法,发现Dede官网中提出此问题的人很多,而且从5.3开始就一直存在这个问题,有个别朋友提出的底层解决方案,修改空间模版中“..\member\space\company”文件夹下的index.htm,introduce.htm,listshop.htm,contact.htm,guestbook.htm五个文件中{dede:value.mtypename/}数据库语句的company替换为{dede:var.userid_e/}变量的具体的方法,经过实验并没有解决问题。 又看到网上具体的教程中发布的文章提到的在保留uid访问方式同时增加mid访问的具体的方法,经过实验问题依然存在。 具体的教程中提到将“member/index.php”文件中的if(empty($uid)){$uid='';}else{[email 988365@gmail.com]($uid);[email 988365@gmail.com]($tmpstr);if($tmpstr2==$uid)$uid=$tmpstr;}具体代码如下更改为if(empty($uid)){if(empty($_REQUEST['mid'])){$uid='';}else{$uid=$dsql->GetOne("SelectuseridFrom`dede_member`wheremid='".$_REQUEST['mid']."';");if(!is_array($uid)){$uid='';}else{$uid=$uid['userid'];}}}分析这两段具体代码如下,小编提出的具体代码如下中增加了从网站数据库中重新读出用户ID的内容重新给uid传递一个值,但是把源网站程序中用于判断uid值是否UTF8编码格式的内容给丢了。 这样的修改大概可以解决同时出现了uid、mid两个访问参数撞车时的问题,但是依然解决不了UTF8编码汉字用户名的问题。 还有些网友干脆认真提出方案限制用户使用汉字名注册,具体的方法相当详备。 不过如果使用UTF8编码就放弃汉字用户名注册未免有点说不过去了,这里就不再详转具体具体的方法了。 【问题分析】从故障的现象看,应该是在判断uid值是出现了错误,导致系统无法识别用户,仔细分析官方具体代码如下中对于汉字UTF8编码的uid判断数据库语句,是利用了GB2UTF8和UTF82GB两个函数进行两次转换然后判断具体代码如下。 在网上找了关于UTF8和GB编码的判断问题,发现其实远远不是这么简单的事儿。 在GB编码和UTF8编码中,存在着部分汉字编码是相同或某部分字节相同的情况,这样利用两次转换的具体的方法判断编码是很不准确的,于是出现了没有重码的汉字用户名可以正确判断并使用,而出现重码的汉字名不能正确判断,发生了“您访问的用户可能已经被删除! ”错误。 【解决具体的方法】在网络上搜索了一些关于UTF8编码判断的具体代码如下,找到了一个用PHP编写的判断函数。 将此名为isUTF8($str)的函数添加在“member\config.php”文件的最后:[php]functionisUTF8($str){$length=strlen($str);for($i=0;$i=$length)returntrue;elseif(($str{$i}&"\xC0")=="\x80")continue;}elseif($high=$length){returntrue;}elseif(($str{$i}&"\xC0")=="\x80"){if( $i>=$length)returntrue;elseif(($str{$i}&"\xC0")=="\x80")continue;}}elseif($high=$length){returntrue;}elseif(($str{$i}&"\xC0")=="\x80"){if( $i>=$length){returntrue;}elseif(($str{$i}&"\xC0")=="\x80"){if( $i>=$length)returntrue;elseif(($str{$i}&"\xC0")=="\x80")continue;}}}returnfalse;}returntrue;}[/php]并修改“member\index.php”中的具体代码如下:将[email 988365@gmail.com]($uid);[email 988365@gmail.com]($tmpstr);if($tmpstr2==$uid)$uid=$tmpstr;修改为if(!isUTF8($uid))[email 988365@gmail.com]($uid);故障排除。 这里仅对官方具体代码如下中判断用户UTF8编码的具体的方法进行了修改,并没有对小编提出的mid参数问题进行修改,若出现了小编提出的故障现象相信他们提到的具体的方法是不错的解决方案。 此文已扼要列出了小编的具体的方法备考。 删除 , 提示 , 用户 |
dedecms上传图片水印失效的解决方法