Отправка специальных символов через AJAX ( < , > , & )

Я отправляю тест через ajax-запрос jquery. Этот текст содержит некоторые специальные символы, такие как «<», «>», «&», которые обозначают ‹, > и &.

$.ajax({
 type: "POST",
 url: "page.php",
 data: "content="+txt });

К сожалению, строка плохо передается. Передается только начало, и оно обрезается при первом спецсимволе.

Например, если я отправлю «blablabla<grogrogro», сервер получит только «blablabla».

Как я могу это исправить?

PS: Спецсимволы на самом деле заканчиваются на ";", я его не ставил, потому что иначе они плохо отображаются.


person Oli    schedule 30.11.2011    source источник


Ответы (2)


& представляет другую переменную в строке запроса данных. Итак, вы должны отправить его с помощью объекта JavaScript, например:

$.ajax({
    type: "POST",
    url: "page.php",
    data: {
        "content": txt
    }
});
person jValdron    schedule 30.11.2011
comment
Это объект JavaScript, не JSON. объект. - person Quentin; 01.12.2011
comment
Он по-прежнему будет публиковать ваши данные на странице page.php. Таким образом, вы получите к нему доступ с помощью $_POST. И спасибо @Квентин. - person jValdron; 01.12.2011

Это предусмотрено дизайном: если вы передаете строку в data, она будет обрабатываться как данные, закодированные в форме URL (например, строка запроса). В этом формате & означает начало нового параметра. Амперсанды в данных должны быть закодированы в URL.

Вам нужно будет либо URL-кодировать ваши данные перед передачей — в PHP правильной функцией будет urlencode() — либо передать массив, который jQuery будет кодировать автоматически:

data: {"content": txt }
person Pekka    schedule 30.11.2011
comment
Технически, это данные application/x-www-form-urlencoded, которые являются стандартным способом кодирования данных в строке запроса, и JSON будет рассматривать их как строку запроса, если выполняется запрос GET. - person Quentin; 01.12.2011
comment
@Quentin правда, поскольку данные будут отправлены в POST. Спасибо - person Pekka; 01.12.2011