Почему экранирующие символы добавляются к значению скрытого ввода - PullRequest
3 голосов
/ 24 июня 2009
<body>
  <div> <?= $_POST['msg'] ?> </div>
  <form id="frm" method="post">
    <input type="hidden" name='msg' value='{"field0": "Im a string", "field1": 84, "field3": "so am I"}' />
    <input type="submit" value="test" />
  </form>
</body>

Когда форма публикуется, между тегами div отображается следующая строка.

{\ "field0 \": \ "Im a string \", \ "field1 \": 84, \ "field3 \": \ "так что я I \ "}

Почему добавляются escape-символы? Они добавляются сервером PHP или веб-клиентом? Могу ли я сделать что-нибудь, чтобы предотвратить это?

Кто-то уже упомянул о лишних чертах в функции PHP. Я использую это сейчас, но я хочу избавиться от косой черты все вместе.

Ответы [ 5 ]

4 голосов
/ 02 июля 2009

Проверьте, активирована ли в вашей конфигурации PHP magic_quotes_gpc, в этом случае сервер PHP автоматически добавляет косые черты в значения GET / POST / cookie ...

2 голосов
/ 25 июня 2009

Я полагаю, что проблема заключается только в том, что вы можете использовать инструменты, которые вы используете для вывода строки. Например:

var msg = dojo.toJson({field1: 'string', field2: 84, field3: 'another string'});
alert(msg);

покажет двойные кавычки как неэкранированные. Точно так же при запуске вашего первого примера, когда браузер подключен к прокси-серверу, такому как Charles, двойные квоты отображаются как неэкранированные.

Так что я считаю, что это просто автоматический выход, который делает Firebug / PHP при отображении строк.

1 голос
/ 02 июля 2009

Скорее всего, вы включили magic_quotes_gpc на вашем сервере. Эта опция конфигурации и функция устарела в php5.3. Пока вы не обновите:

if (get_magic_quotes_gpc()) {
    set_magic_quotes_runtime(0);
    foreach (array('POST', 'GET', 'REQUEST', 'COOKIE') as $gpc)
        $GLOBALS["_$gpc"] = array_map('dequote', $GLOBALS["_$gpc"]);
}

function dequote($v) {
        return is_array($v) ? array_map('dequote', $v) : stripslashes($v);
}

Приведенное выше решение основано на чьем-то коде, который я нашел где-то несколько лет назад.

1 голос
/ 02 июля 2009

проверьте, включены ли на вашем хосте магические кавычки

1 голос
/ 24 июня 2009

Если информация верна, когда она покидает клиента, то dojo должен выполнить какое-то волшебство перед отправкой информации в $ _POST, нет? Существуют ли какие-либо флаги, которые вы можете установить для метода dojo.toJson (), который позволит вам контролировать уровень манипуляции / экранирования входной строки? Если нет, то я думаю, что использование stripslashes () (или чего-то еще, в зависимости от того, куда направляется эта информация) - единственный ответ.

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