0
我将这个数组从一个函数传递到另一个函数


    函数 componentBuildRoute(&$query)
    {
        $segments = 数组();
        $segments[] = $var...
        ...
        $str = 序列化($segments);
        $str = urlencode($str);
        $segments[] = $str;

//如果我为 $segments[] 做一个 pre print_r;
//这个打印
//**序列化:
//大批
//(
// [页面] => mostrar_clasificado
// [catid] => 3
// [category_alias] => 新
// [添加] => 3
// [ad_alias] => 3-way-conector-de-tubos
// [0] => a%3A5%3A%7Bs%3A4%3A%22page%22%3Bs%3A19%3A%22mostrar_clasificado%22%3Bs%3A5%3A%22catid%22%3Bs%3A1%3A%223 %22%3Bs%3A14%3A%22category_alias%22%3Bs%3A5%3A%22nuevo%22%3Bs%3A4%3A%22adid%22%3Bs%3A1%3A%223%22%3Bs%3A8%3A%22ad_alias %22%3Bs%3A23%3A%223-way-conector-de-tubos%22%3B%7D
//)**

    返回$段;
    }
函数组件解析路由($segments)  
    {
//如果我为传递的 $segments[] 数组做一个 pre print_r();
//*此打印
//**通过的段:
//大批
//(
// [0] => mostrar_clasificado
// [1] => 3
// [2] => 新
// [3] => 3
// [4] => 3:way-conector-de-tubos
// [5] => a:5-{s-4-"page";s-19-"mostrar_clasificado";s-5-"catid";s-1-"3";s-14-"category_alias ";s-5-"nuevo";s-4-"adid";s-1-"3";s-8-"ad_alias";s-23-"3-way-conector-de-tubos"; }
//)**
        $str = end($segments);
        回声“通过数组STR的最后一个元素:
        ".**$str**;

//这个打印:
//传递的数组STR的最后一个元素:
a:5-{s-4-"page";s-19-"mostrar_clasificado";s-5-"catid";s-1-"3";s-14-"category_alias";s-5-" nuevo";s-4-"adid";s-1-"3";s-8-"ad_alias";s-23-"3-way-conector-de-tubos";}
//**已经解码怎么来的?**
        $测试 = 数组();
        **$testing = unserialize($str);**
        echo "未序列化测试:";
    print_r($testing);
//这个打印:
//未序列化的段:
//**没有数组!!!(文本后的空格)没有未序列化的数组**
//我将再次打印数组以验证我得到了我认为我得到的东西

回声“段2:”;
    print_r($segments);

//这个打印:
//第 2 段:
//
//大批
//(
// [0] => mostrar_clasificado
// [1] => 3
// [2] => 新
// [3] => 3
// [4] => 3:way-conector-de-tubos
// [5] => a:5-{s-4-"page";s-19-"mostrar_clasificado";s-5-"catid";s-1-"3";s-14-"category_alias ";s-5-"nuevo";s-4-"adid";s-1-"3";s-8-"ad_alias";s-23-"3-way-conector-de-tubos"; }
//)
//我无法**未序列化**数组的最后一个元素
//任何指针?
//另外,正如我之前提到的,
//我不明白为什么urlencoded
//并序列化
//数组的元素,被传递给
//第二个函数已经urldecoded
4

2 回答 2

0

嘿国防部此代码正常工作!



function componentBuildRoute(&$query)
{
        $segments = array();
        $str = serialize(
            array(
                "page"=>"mostrar_clasificado",
                "catid"=>"3",
                "category_alias"=>"nuevo",
                "adid"=>"3",
                "ad_alias"=>"3-way-conector-de-tubos"
                )
            );
        $str = urlencode($str);
        $segments[] = $str;
        return $segments;
}
function componentParseRoute( $segments )  
{
        $str = end($segments);
        $testing = array();
        $str = urldecode($str);
        $testing = unserialize($str);
   return $testing;
}

$query = '';

$val = componentBuildRoute(&$query);
print_r($val);
echo "\n";
$val2 = componentParseRoute($val);
print_r($val2);



于 2010-12-23T09:56:56.077 回答
0

我无法反序列化通过数组段传递给第二个函数的字符串。我在互联网上发现许多帖子表明,当围绕已传递数据的核心结构传递序列化字符串时,即使它看起来完好无损,它也可能已经改变。我不知道技术细节。但是当我做了一个 var_dump(sunserialized_array) 我得到了错误。

对于我发现的一些信息,我发布了这些链接:
http ://www.php.net/manual/en/function.unserialize.php#70884
http://www.php.net/manual/en/function.unserialize .php#40757

我最初的目标是传递一个数组的序列化版本,作为同一数组的一个字符串元素,以进行反序列化并在第二个函数中使用。因此,我使用问题中数组的收集键和变量(我的问题代码中的数组 $segments)创建了一个字符串,并将 $string_to_be_parsed 添加到正在传递的数组中。我在第二个函数中检索了 $string_to_parsed=end($segments) ,并且......这是很好的部分,使用此函数重新创建数组parse_str($str, $segments);

我找到了这个解决方案:为什么 PHP 中的反序列化一直返回 false?

所以,我无法反序列化我想要的东西,但我找到了另一种实现目标的方法。

于 2010-12-23T20:27:47.910 回答