vus520 发表于 2009-6-26 10:05:40

[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

专业收费采集 发表于 2009-6-26 10:39:18

支持尘缘

soarb 发表于 2009-6-26 11:12:51

支持尘尘。。

vus520 发表于 2009-6-26 11:14:52

同志们好,同志们辛苦了。

同志们别潜水了。

sendmail 发表于 2009-7-2 20:38:50

不错的方法

love5yi 发表于 2009-7-24 02:13:37

{:4_188:}希望有用,谢谢

cnadd 发表于 2009-8-11 00:51:14

试了,的确不错ali6ls

2482003 发表于 2009-8-11 01:29:14

支持了!!!!!!!!!!!!!!!

342396562 发表于 2009-8-11 14:48:25

支持支持!!!!!!

testu 发表于 2009-8-19 23:48:42

效果确实,非常感谢。。。。。。
页: [1] 2 3
查看完整版本: [9月18日更新]解决DEDEV5.3/V5.5中使用UrlEncode发布会出现乱码的问题