Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php] Как отключить экранирование / 14 сообщений из 14, страница 1 из 1
15.11.2012, 01:12
    #38039017
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Новая напасть. Отсылаю из js json-строку в post-параметре, а в php получаю {\\\"title\\\":\\\"+asdasd\\\"}. Как это раскукожить?
...
Рейтинг: 0 / 0
15.11.2012, 01:27
    #38039023
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Тынц . Не забываем проверить magic_quotes_gpc , дабы не наступить на грабли в будущем.
...
Рейтинг: 0 / 0
15.11.2012, 10:06
    #38039239
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
vkle Тынц . Не забываем проверить magic_quotes_gpc , дабы не наступить на грабли в будущем.
Ага, addslashes аж два раза у него как то смогло запуститься. Магик раз, а два?
...
Рейтинг: 0 / 0
15.11.2012, 11:18
    #38039347
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Ренат,

Мы же не знаем, что происходит ни на стороне клиента, ни на сервере до того момента как Shitbox2 увидел этот код... Мож и в самом деле все входные переменные не глядя через addslashes проходят, а мож жабаскрипт так формирует отправку :-)
...
Рейтинг: 0 / 0
15.11.2012, 12:00
    #38039431
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Вся я знаю. Сам же формирую и отправляю. У клиента:
Код: javascript
1.
2.
3.
4.
5.
6.
JSON.stringify(item.data)

var formData = new FormData();
formData.append((item.fieldName || 'file'), item.file);
formData.append((item.fieldName || 'file'), item.data);
xhr.send(formData);


Т.е. данные я отправляю в сгенерированном автоматически поле формы вместе с файлом.

В PHP json_decode соответственно.

Намучился уже с этим json! Каждый раз по-разному отправляется! На локальной машине одно, на одном сервере другое, на другом третье! Есть какой-нибудь универсальный способ отправки? Или можно в php-скрипт внести код, который будет править PHP.ini, чтобы вручную не делать каждый раз?
...
Рейтинг: 0 / 0
15.11.2012, 12:16
    #38039464
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Shitbox2Или можно в php-скрипт внести код, который будет править PHP.ini, чтобы вручную не делать каждый раз?Идея, достойная барона Мюнхаузена! Вот только абсолютно не универсальная.
...
Рейтинг: 0 / 0
15.11.2012, 12:21
    #38039481
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
А что универсальное? Даже ладно, какие настройки оптимальны на сегодняшний день для отправки json данных в utf8?
...
Рейтинг: 0 / 0
15.11.2012, 13:00
    #38039571
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Универсальное - проверка и установка по возможности нужных настроек. Проблема в том, что не все настройки можно установить непосредственно из скрипта. Зато, практически все можно проверить. И в соответствии с имеющимися настройками выполнять ту или иную обработку данных.

Правка же php.ini мало приемлема из-за ограничений. На шаред-хостинге править общий конфиг никто не даст. Зато, в зависимости от вида установки PHP и вебсервера можно управлять некоторыми настройками либо через .htaccess (модуль), либо через php.ini в папке выполняемого скрипта (при использовании suphp), либо через отдельный файл конфигурации, либо через панель управления хостингом.
...
Рейтинг: 0 / 0
15.11.2012, 13:25
    #38039646
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Ну, а конкретно для json какие должны быть настройки?
...
Рейтинг: 0 / 0
15.11.2012, 14:48
    #38039869
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Ничего особенного json собой не представляет. Обычная строка текста.
...
Рейтинг: 0 / 0
15.11.2012, 15:26
    #38039935
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Да уж, обычная...
В этом случае помогло json_decode(stripslashes($_POST['data']), true);

В аналогичном случае на другом сервере (правда там форма не генерировалась автоматически) пришлось использовать
json_decode(htmlspecialchars_decode($_POST['data']), true);

Если же не загонять json-строку в $_POST['data'], а передавать напрямую функцией $.ajax, то работает обычный json_decode, причем работает даже если предварительно закодировать строку encodeURIComponent().

Так что обычную json-строку сервер кодирует как ему вздумается, то специальные символы добавит, то экранирует слешами, то удалит чего-то...
...
Рейтинг: 0 / 0
15.11.2012, 16:39
    #38040072
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Shitbox2то удалит чего-то...Упс! И чего-же удаляет? Есть пример?
...
Рейтинг: 0 / 0
15.11.2012, 20:11
    #38040459
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Ну, если мы кодируем в encodeURIComponent(), а json_decode это нормально обрабатывает, значит заменяет там что-то)
...
Рейтинг: 0 / 0
15.11.2012, 20:49
    #38040487
vkle
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
[php] Как отключить экранирование
Shitbox2кодируем в encodeURIComponent(), а json_decode это нормально обрабатываетК чему эти хвосты в одной куче? Рассматривайте отдельно каждый из этапов. Что имеете на входе, что получаете на выходе. С хвостами получается несколько этапов передачи данных. И, потенциально, на каждом из них данные могут быть тем или иным образом преобразованы или не тронуты. Потому есть смысл рассматривать чистую передачу данных в php или, как максимум, от клиента -> через вебсервер -> в php. Вполне возможно что после кодирования "неугодных" символов не окажется во входной строке в явном виде, и она не будет преобразована.
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / [php] Как отключить экранирование / 14 сообщений из 14, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]