2016-11-17 80 views
-2

一直在尋找一種方法來解析像private, max-age=86400字符串轉換成一個這樣的數組:解析Cache-Control頭在PHP

[private] => TRUE 
[max-age] => 86400 
+0

請發表評論,爲什麼這是一個糟糕的問題。解析緩存控制標題似乎是一個有效的問題。根據評論我目前的答案是不正確的,因此沒有被接受。 – mikeytown2

回答

-1
/** 
* Parse the cache-control string into a key value array. 
* 
* @param string $cache_control 
* The cache-control string. 
* 
* @return array 
* Returns a key value array. 
*/ 
function parse_cache_control($cache_control) { 
    $cache_control_array = explode(',', $cache_control); 
    $cache_control_array = array_map('trim', $cache_control_array); 
    $cache_control_parsed = array(); 
    foreach ($cache_control_array as $value) { 
    if (strpos($value, '=') !== FALSE) { 
     $temp = array(); 
     parse_str($value, $temp); 
     $cache_control_parsed += $temp; 
    } 
    else { 
     $cache_control_parsed[$value] = TRUE; 
    } 
    } 
    return $cache_control_parsed; 
} 
+1

'cache-control'允許使用帶引號的字符串(https://tools.ietf.org/html/rfc7234#section-5.2),因此在''上分割將不起作用。 – Joe

+0

@Joe你有一個引用字符串的例子嗎?在RFC中它不是很清楚它的樣子。 – mikeytown2

+0

這是一個利基案例,並且 [考慮刪除](https://www.ietf.org/mail-archive/web/httpbisa/current/msg08290.html), 但是「Cache-Control:private =」set -cookie,last-modified「'是有效的。更一般地說,[任何擴展](https://tools.ietf.org/html/rfc7234#section-5.2.3)都可以使用它(規範中的'community =「UCI」'是一個示例,儘管 不是病理性的)。 – Joe