应该如何使用parse_str?

时间:2011-12-08 15:54:15

标签: php arrays

parse_str并不像我期望的那样......

我正在将一个字符串存储到cookie中。它已使用http_build_query准备,然后使用base64编码。

当我读取cookie时,我是base64_decode和url_decode。这给了我以下字符串:(在某些情况下,值已经改变,ip等。)

$字符串:

session_id=41a69e102653568b6e483b3eba861484&page_type=&ip=101.101.101.101&host=host101.101.101.101.in-addr.btopenworld.com&user_agent=Mozilla/5.0 (Windows NT 6.1; rv:8.0.1) Gecko/20100101 Firefox/8.0.1&referer=https://domain.com/&referer_domain_tld=domain.com&referer_keywords=&URI=/index.php?path=statistics&fn=test.php&URLdomain.com/index.php?path=statistics&fn=test.php&html_title=&browser=&browser_version=&OS=&OS_version=Windows Windows 7&screen_resolution=&start_date=1323358398&date=1323358398&referer_search_position=&load_time=0.00300002098083&id=&cs=e14272b7e8d9053a5e85ee72083faa5d

这是代码:

    $cookie_data = urldecode(base64_decode($_COOKIE[$stats_cookie_name]));                                  // decode and clean the cookie data. This is the cookie data all decoded and ready to convert to an key->value array.

    $cookie_data_ar = array();

    $cookie_data_ar = parse_str($cookie_data);  

理论上,使用parse_str($ string)应该将此字符串转换为整齐的数组。但事实并非如此。现在完全交叉,已经浪费了几个小时。我确定它的东西是愚蠢的,只是看不到它。请新鲜的眼睛!

3 个答案:

答案 0 :(得分:1)

您应该查看docparse_str返回void。但是,第二个参数是(通过引用)指定的数组:

void parse_str ( string $str [, array &$arr ] )

答案 1 :(得分:1)

parse_str有两种“模式”:

  1. 默认情况下,它不返回任何内容(你怎么没有在这里收到错误或警告?!)而是“在当前范围内设置变量”。

  2. 如果提供第二个(可选)参数(这是一个参考),“变量将作为数组元素存储在此变量中”。你想要这个。

  3. 所以:

    parse_str($cookie_data, $cookie_data_ar);  
    

    这可能不直观,但从文档中可以清楚地看出来。

答案 2 :(得分:0)

parse_str不会返回一个数组(它的类型为void) - 您可以将数组作为第二个参数传递,然后相应地填充该数组,如,

parse_str($str, $output);