Почему php читает обратную косую черту? - PullRequest
1 голос
/ 23 ноября 2011

У меня есть код, который сохраняет данные в куки. и данные, сохраненные в 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 ]

3 голосов
/ 23 ноября 2011

Это потому что волшебные кавычки включены на хосте.Это ужасная «фича», и всем хочется, чтобы она просто умерла.

Если вы можете редактировать php.ini на сервере, установите magic_quotes_gpc = Off и magic_quotes_runtime = Off.

В противном случае, если Apacheэто HTTP-сервер, есть .htaccess трюк, который вы можете использовать, задокументированный здесь .

В противном случае, вы должны использовать 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 голос
/ 23 ноября 2011

Скорее всего, вы включили magic_quotes_gpc ,
как избежать двойной цитаты для GET, POST, COOKIE

0 голосов
/ 23 ноября 2011

Вы не можете сделать это таким образом.

Чтобы записать файл cookie, используйте что-то вроде: напишите в массив $ cookievalue.

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

, получите данные иположить его обратно в массив:

$cookieArray = explode("|", $_COOKIE['cookie']);
0 голосов
/ 23 ноября 2011

% 22 - это HTML для ", и PHP разделяет эти кавычки обратной косой чертой. Для получения дополнительной информации см. Это: http://aaroncameron.net/article.html?aID=59

Вы можете отключить эту функцию или удалить косую черту самостоятельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...