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)应该将此字符串转换为整齐的数组。但事实并非如此。现在完全交叉,已经浪费了几个小时。我确定它的东西是愚蠢的,只是看不到它。请新鲜的眼睛!
答案 0 :(得分:1)
您应该查看doc。 parse_str
返回void
。但是,第二个参数是(通过引用)指定的数组:
void parse_str ( string $str [, array &$arr ] )
答案 1 :(得分:1)
parse_str
有两种“模式”:
默认情况下,它不返回任何内容(你怎么没有在这里收到错误或警告?!)而是“在当前范围内设置变量”。
如果提供第二个(可选)参数(这是一个参考),“变量将作为数组元素存储在此变量中”。你想要这个。
所以:
parse_str($cookie_data, $cookie_data_ar);
这可能不直观,但从文档中可以清楚地看出来。
答案 2 :(得分:0)
parse_str
不会返回一个数组(它的类型为void
) - 您可以将数组作为第二个参数传递,然后相应地填充该数组,如,
parse_str($str, $output);