Мне нужно передать кучу текста из javascript в php с помощью ajax и сохранить его в базе данных. Я могу использовать только javascript, а не jquery. Этот текст должен включать символ новой строки и такие символы, как {}!@#$%^&*/?(){}
.
Значение, которое я передал, находится в ассоциативном массиве { id:[], text:[] }
, поэтому я использую encodeURIComponent()
для текста [], а затем JSON.stringify()
его. Со стороны PHP я использую urldecode()
и json_decode()
для декодирования текста.
Вот как я делаю вызов ajax с javascript:
var xhr = new XMLHttpRequest();
xhr.open('POST', url, true);
xhr.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
xhr.onreadystatechange = function() { //blah blah }
xhr.send(params);
Теперь проблема возникает, когда в тексте есть новая строка. json_decode () будет выпускать NULL, если есть новая строка. Почему это так?
Это решение, которое я придумала. Я заметил, что encodeURIComponent()
изменит перевод строки на %0A
. Поэтому, если я использую регулярное выражение для преобразования каждого %0A
в \n
. Проблема решена. Но опять же, почему? Почему urldecode()
на PHP стороне не удалось правильно преобразовать новую строку?