Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHPшная функция unserialize удаляет знак + / 25 сообщений из 25, страница 1 из 1
18.09.2012, 20:34:38
    #37962986
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Попался на том, что unserialize заменяет + на пробел. С чего бы это? Она ожидает, что-ли, что данные должны быть urlcode?
Пробовал unserialize(urlencode($data)), но ничего не вышло.

Из-за чего может быть проблема с заменой +. Если ее не обойти, то как еще дополнительно нужно кодировать строку в JS и раскодировать в PHP?
...
Рейтинг: 0 / 0
18.09.2012, 21:31:09
    #37963040
Ренат
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Shitbox2,

если через js работаете - используйте json_decode/encode для преобразований обьекта в JS представление
...
Рейтинг: 0 / 0
18.09.2012, 21:59:21
    #37963068
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Пробовал, но не нашел в ни в js, ни jQuery функции для преобразования объекта в json. И задача стоит именно в передаче объекта из JS в PHP, обратно-то все работает.
...
Рейтинг: 0 / 0
18.09.2012, 22:08:38
    #37963072
ShSerge
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Shitbox2Пробовал, но не нашел в ни в js, ни jQuery функции для преобразования объекта в json. И задача стоит именно в передаче объекта из JS в PHP, обратно-то все работает.
Понятно. Сталкивался. На самом деле, имеется целая куча стандартных преобразовалок, но лично я не заморачиваюсь, просто плюсик в какую-нибудь кракозябру перекодирую, а потом - обратно.
...
Рейтинг: 0 / 0
18.09.2012, 22:32:46
    #37963094
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Ну да, есть в JS JSON.stringify и на выходе даже json строка получается. Но json_decode пхп-ный ее не берет почему-то
...
Рейтинг: 0 / 0
18.09.2012, 22:49:14
    #37963108
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
А нет, берет, только в json_decode нужно второй параметр true указать. Но плюсы все равно не отображаются! Причем, это только то, что заметил. А если там и другие символы пропадают? Не хотелось бы, чтобы потом вылезло.
...
Рейтинг: 0 / 0
19.09.2012, 07:45:24
    #37963256
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Код: php
1.
2.
$str = '1+1';
var_dump(urldecode(urlencode($str)));



Код: plaintext
string(3) "1+1"
...
Рейтинг: 0 / 0
19.09.2012, 11:54:20
    #37963717
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Это какое-то издевательство!!! Кодирую в JS строку с помощью encodeURIComponent или escape, PHP все нормально раскодирует, но знаки "+" все равно заменены на пробелы! Везде UTF-8. Что не так, не понимаю...
...
Рейтинг: 0 / 0
19.09.2012, 11:55:38
    #37963720
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
пример данных
...
Рейтинг: 0 / 0
19.09.2012, 11:56:54
    #37963722
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
...
Рейтинг: 0 / 0
19.09.2012, 11:57:10
    #37963723
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
авторЗамечание:

rawurldecode() не декодирует символ сложения ('+') в пробелы. Это делает urldecode().
...
Рейтинг: 0 / 0
19.09.2012, 12:12:53
    #37963758
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Сделал! Но не разобрался.

В общем, на стороне JS должно быть:
Код: javascript
1.
encodeURIComponent(JSON.stringify(data))

(escape не подходит, т.к. не шифрует "+")

На стороне PHP:
Код: php
1.
json_decode($_POST('data'), true)


И все!
Во время передачи в скрипт строка сама раскодировалась (почему?), а ПХП-ная функция urldecode только и делала, что плюсы на пробелы заменяла
...
Рейтинг: 0 / 0
19.09.2012, 12:13:40
    #37963761
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Потому что в ней это заложено, я выше привел ссылку.)
...
Рейтинг: 0 / 0
19.09.2012, 13:38:53
    #37963969
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Hett, по ссылке не понял почему. Там про rawurldecode... А у меня-то работает, вообще, без этих функций. Т.е. JS отправляет строку в URL-формате, а в $_POST она уже содержится в нормальном виде без всяких манипуляций с моей стороны. Может это из-за настроек PHP или сервера?
...
Рейтинг: 0 / 0
19.09.2012, 14:14:48
    #37964090
Илья209
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
День добрый, столкнулся сегодня с такой же проблемой:
Кодирую объект в JSON (перепробовал разными способами, но остановился на $.toJSON из jquery.json-2.3.min.js).
Отдаю аяксом:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
	$.ajax({
		type: 'POST',
		url:'js/library/lib_historyUI.php',
		dataType:'json',
		data:'data='+$.toJSON(data),
		success:test2,
		cache: false,
		scriptCharset: 'utf-8'
	});
После кодирования - все хорошо, все символы на месте.
Но после выполнения json_decode на сервере все символы '+' заменяются на пробелы.

Есть идея выставить костыль: кодировать знак + какой-нибудь последовательностью, а потом уже эту последовательность снова преобразовывать, но это ведь как-то глупо
...
Рейтинг: 0 / 0
19.09.2012, 14:36:42
    #37964152
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Код: php
1.
2.
3.
4.
5.
6.
7.
8.
	$.ajax({
		type: 'POST',
		url:'js/library/lib_historyUI.php',
		data: data,
		success:test2,
		cache: false,
		scriptCharset: 'utf-8'
	});



мош так?
...
Рейтинг: 0 / 0
19.09.2012, 14:55:57
    #37964206
Илья209
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
нет, я выложил рабочий код. Но, в принципе, сути это не меняет: что без указания dataType, что с ним...

Сейчас тестирую и обнаружил странную вещь: символ '+' теряется при передаче данных,
т.е. в $_POST['data'] его уже нет (я его возвращал в js: echo $_POST['data'], но, думаю, тут потеряться ничего не могло)
...
Рейтинг: 0 / 0
19.09.2012, 15:03:35
    #37964226
Илья209
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Ну и уже описанным выше способом:
Код: plaintext
1.
data:'data="'+encodeURIComponent(String($.toJSON(data))+'"'),
я получил все-таки знак '+' в POST
...
Рейтинг: 0 / 0
19.09.2012, 21:16:14
    #37964748
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Ну вообще-то все логично.
А чем мой вариант не нравится?
...
Рейтинг: 0 / 0
21.09.2012, 02:28:33
    #37966674
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Илья209, не очень понимаю, зачем в вашей строке ... 'data="' ... +'"', но, думаю, если укажете свойство как 'data': func(...), то можно без кавычек обойтись.

Hett, а почему ваш способ должен работать? Потому что кодировка указана? А если везде-везде и на сервере и в ПХП и сами странички в UTF-8, а в настройках Аякса не прописать напрямую, разве уйдет в другой кодировке?
...
Рейтинг: 0 / 0
21.09.2012, 07:36:28
    #37966710
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
А почему он должен не работать?
Жиквери позволяет передавать объекты в качестве параметров запроса.
...
Рейтинг: 0 / 0
21.09.2012, 07:36:40
    #37966711
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Кодировка там и была, я лишь немножко поправил код.
...
Рейтинг: 0 / 0
21.09.2012, 11:37:38
    #37967035
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Hett, вот мой вариант, который обрезал "+" без encodeURIComponent. Такой же как и ваш
Код: javascript
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
$.ajax({
    'url': this.url,
    'type': 'post',
    'dataType': 'html',
    'data': {
        'action': 'save',
        'data': encodeURIComponent(data)
    },
    'success': function(data) {

    }
});
...
Рейтинг: 0 / 0
21.09.2012, 13:13:02
    #37967266
Hett
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Я вот не поленился и накидал небольшой примерчик

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
<?php
if(count($_POST)) {
    print_r($_POST);
    die();
}
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
        "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
    <title></title>
    <script type="text/javascript" src="chat/jquery-1.7.2.js"></script>

</head>
<script type="text/javascript">
    function send() {
        $.ajax({
            url: 'test/index.php',
            type: 'post',
            data: {
                id: 'asdf+++asd'
            },
            success: function(data){
                alert(data);
            }
        });
    }
</script>

<body>

<button onclick="send()">Send</button>


</body>
</html>



и все работает нормально, что я делаю не так?
...
Рейтинг: 0 / 0
21.09.2012, 15:02:27
    #37967493
Shitbox2
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
PHPшная функция unserialize удаляет знак +
Hett, да, в примере все работает, как не изголялся. У меня в такой комбинации — нет. Проследил всю цепочку, но все равно не понял в чем дело. Может из-за того, что у меня редиректы везде настроены...
...
Рейтинг: 0 / 0
Форумы / PHP, Perl, Python [игнор отключен] [закрыт для гостей] / PHPшная функция unserialize удаляет знак + / 25 сообщений из 25, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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