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

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

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



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

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

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

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

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


И все!
Во время передачи в скрипт строка сама раскодировалась (почему?), а ПХП-ная функция urldecode только и делала, что плюсы на пробелы заменяла
...
Рейтинг: 0 / 0
PHPшная функция unserialize удаляет знак +
    #37963761
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Потому что в ней это заложено, я выше привел ссылку.)
...
Рейтинг: 0 / 0
PHPшная функция unserialize удаляет знак +
    #37963969
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Hett, по ссылке не понял почему. Там про rawurldecode... А у меня-то работает, вообще, без этих функций. Т.е. JS отправляет строку в URL-формате, а в $_POST она уже содержится в нормальном виде без всяких манипуляций с моей стороны. Может это из-за настроек PHP или сервера?
...
Рейтинг: 0 / 0
PHPшная функция unserialize удаляет знак +
    #37964090
Илья209
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
День добрый, столкнулся сегодня с такой же проблемой:
Кодирую объект в 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
PHPшная функция unserialize удаляет знак +
    #37964152
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: 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
PHPшная функция unserialize удаляет знак +
    #37964206
Илья209
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
нет, я выложил рабочий код. Но, в принципе, сути это не меняет: что без указания dataType, что с ним...

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

Hett, а почему ваш способ должен работать? Потому что кодировка указана? А если везде-везде и на сервере и в ПХП и сами странички в UTF-8, а в настройках Аякса не прописать напрямую, разве уйдет в другой кодировке?
...
Рейтинг: 0 / 0
PHPшная функция unserialize удаляет знак +
    #37966710
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А почему он должен не работать?
Жиквери позволяет передавать объекты в качестве параметров запроса.
...
Рейтинг: 0 / 0
PHPшная функция unserialize удаляет знак +
    #37966711
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кодировка там и была, я лишь немножко поправил код.
...
Рейтинг: 0 / 0
PHPшная функция unserialize удаляет знак +
    #37967035
Shitbox2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
PHPшная функция unserialize удаляет знак +
    #37967266
Фотография Hett
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я вот не поленился и накидал небольшой примерчик

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


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