2011-11-23 242 views
1

我有一個將數據保存到cookie的代碼。並保存在cookie中的數據是這樣的:爲什麼php在讀取反斜槓?

(%22Lynyrd%20Skynyrd%22%3D%3Earray(%226983887641%22)%2C%20(%22Rod%20Stewart%22%3D%3Earray(%2259088763306%22)%2C%20(%22Led%20Zeppelin%20Official%22%3D%3Earray(%22131572223581891%22)%2C%20(%22Black%20Sabbath%22%3D%3Earray(%2256848544614%22)%2C%20(%22Hadag%20Nahash%20%D7%94%D7%93%D7%92%20%D7%A0%D7%97%D7%A9%22%3D%3Earray(%22116542622632%22)%2C%20 

,當我用這個PHP讀取它:

<?php 
    if (isset($_COOKIE["currentsearchctrl"])) { 
     $cookz = $_COOKIE["currentsearchctrl"]; 
     echo $cookz; 

    } else { 
     echo 'cookie not set'; 
    } ?> 

它返回與此:

(\"Lynyrd Skynyrd\"=>array(\"6983887641\"), (\"Rod Stewart\"=>array(\"59088763306\"), (\"Led Zeppelin Official\"=>array(\"131572223581891\"), (\"Black Sabbath\"=>array(\"56848544614\"), (\"Hadag Nahash הדג נחש\"=>array(\"116542622632\"), 

的問題是反斜槓。我打算:$ data = array($ cookz);但它不起作用。

有什麼想法?

+0

你可以用'str_replace'的「\」「,但它會是一個更好的想直接序列化和反序列化你的數據,而不是在最後使用數組。例如,你可以使用http://www.php.net/manual/en/ref.json.php。 – Viruzzo

回答

3

這是因爲magic quotes是在主機上啓用。這是一個可怕的「特徵」,每個人都希望它會死亡。

如果您可以在服務器上編輯php.ini,請設置magic_quotes_gpc = Offmagic_quotes_runtime = Off

否則,如果Apache是​​HTTP服務器,則可以使用.htaccess技巧,記錄爲here

否則,您必須使用stripslashes()才能使數據恢復正常。下面是我使用禁用魔術引號當它是不可能禁用它另一種方式include'd腳本:

if (get_magic_quotes_gpc()) { 
    function array_stripslashes(&$array) { 
     foreach($array as $k => $v) { 
      if (is_array($v)) { 
       array_stripslashes($array[$k]); 
      } else { 
       $array[$k] = stripslashes($v); 
      } 
     } 
    } 
    array_stripslashes($_GET); 
    array_stripslashes($_POST); 
    array_stripslashes($_COOKIE); 
    array_stripslashes($_REQUEST); 
} 

set_magic_quotes_runtime(0); 
+0

太棒了!我的主人禁用了magic_quotes_gpc。謝謝! – Hadrian

0

你不能做這種方式。

要遠離寫一個cookie的使用有點像,寫$ cookievalue到陣列中。

$cookievalue = implode("|", $array); 

一次檢索數據,並把它放回一個數組:

$cookieArray = explode("|", $_COOKIE['cookie']);