为什么php阅读反斜杠?

时间:2011-11-23 16:58:09

标签: php arrays cookies

我有一个将数据保存到cookie的代码。保存在cookie中的数据如下:

(%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);但它不起作用。

任何想法?

4 个答案:

答案 0 :(得分: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);

答案 1 :(得分:1)

很可能你已启用magic_quotes_gpc
因为它逃脱GET,POST,COOKIE的双引号

答案 2 :(得分:0)

%22是HTML for“和PHP用反斜杠分隔这些引号。有关详细信息,请参阅此内容:http://aaroncameron.net/article.html?aID=59

您可以关闭此功能,也可以自行删除斜杠。

答案 3 :(得分:0)

你不能这样做。

要使用类似的东西写出cookie,将$ cookievalue写入数组。

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

并检索数据,然后将其放回到数组中:

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