[9月18日更新]解决DEDEV5.3/V5.5中使用UrlEncode发布会出现乱码的问题
2009-09-18日更新,由于没有考虑到DEDE提交的数据中还有FLAGS数组,上面的Urldecode操作会将FLags的值抹掉,所以,有一些用户就会发现发布推荐参数时不成功,请大家更新代码。我们知道,用火车采集器发布数据时,可能会需要使用UrlEncode发布。
如:空格丢失,内容中含有&等可能隔断参数的符号等,由于DEDE默认没有加入对变量的转码处理,所以,使用UrlEncode发布到DEDE时,会出现乱码现像。
此文为解决办法。
修改DEDE管理员目录,默认为dede,如果你修改了管理员目录,请根据实际情况找一下对应目录。
在dede/config.php末尾中加一段代码即可,注意,加在"?>"以前。
//给POST变量做转码处理,适用于火车采集器中Urlencode发布的内容
foreach($_POST as $key=>$value){ !is_array($value) && ${$key} = $_POST[$key] = urldecode($value); }
没有在include/comm.inc.php中加这段代码的原因,是dede/config.php只适用于发布内容,对全局变量来说,风险范围小很多。
PS:以下是一些编程建议,非PHP程序员不要看了。
2009-09-18日更新时,直接跳过了数组内容的处理,这在DEDE中基本上不会出现问题了。如果在其它地方要遍历数组并进行操作可以使用这样一个递归函数。
function ArrayUrldecode($_POST){
foreach($_POST as $key=>$value){
if(is_array($value)){
ArrayUrldecode($value);
}else{
$_POST[$key] = urldecode($value);
}
}
return $_POST;
}
返回经过处理的$_POST变量,那这个函数需要在程序加载时调用。
同理,可以适用于其它程序中。
一些技术内容在博客中会细讲:http://www.4wei.cn/?p=1000125
支持尘缘 支持尘尘。。 同志们好,同志们辛苦了。
同志们别潜水了。 不错的方法 {:4_188:}希望有用,谢谢 试了,的确不错ali6ls 支持了!!!!!!!!!!!!!!! 支持支持!!!!!! 效果确实,非常感谢。。。。。。