jasonOk
@jasonOk
Легче болтать, чем код писать

Ошибка с пробелами?

Предисловие
На сайте комментарии добавляются через ajax т.е. идёт отправка на сервер.
Можно писать теги <p> <b> <div> и тому подобные; используется tinyMCE (фильтрация лишних тегов с помощью jevix). Сами комментарии прекрасно работают и добавляются, но совсем недавно заметил странный баг.
Суть проблемы
А вот в чём собственно дело: ввожу простой текст "123 123" отправляется он как <p>123 123</p>, НО если идёт больше одного пробела подряд, то всё после этих самых пробелов обрезается.

Получается:
допустим отправляю переменную text <p>123 123</p> (посередине 2 пробела)
для теста на сервере сделал всего лишь несколько строк
if(!empty($_POST['text'])){

echo $_POST['text'];

}else echo 'error';

Но в консоль echo выводит <p>123 (обрезает исходный текст)
Также абсолютно не работает <p> 123</p> (пробел в самом начале).
Вроде как ошибка связана с тегом <p> — якобы это он убирает повторение пробелов, но... думаю всё-таки нет.
Так как можно решить сею проблему?
  • Вопрос задан
  • 963 просмотра
Пригласить эксперта
Ответы на вопрос 5
NKros
@NKros
Проверьте в инструментах разработчика браузера что именно отсылается с post.
Вероятнее всего ваши пробелы обрывают строку на этом месте и все остальное просто не отправляется.
Ответ написан
Комментировать
swanrnd
@swanrnd
Издатель HTML5 игр
Замените много все пробелы на один.
$text = " one   two    three ";
$text = preg_replace('| +|', ' ', $text);
var_dump($text);
Ответ написан
@esvlad
Веб-разработчик
Маловероятно, что проблема с тегом, как вообще тег может убирать пробелы, верно, никак.
Как вариант, ошибка в Jevix. Посмотрите в его настройках.
А вообще можно использовать Тини и без этого плагина, просто его нужно нормально настроить.
Ответ написан
Acuna
@Acuna
Заполнил свой профиль
Вы не написали что за двиг у сайта, самопис? Часто фильтруют содержимое массива $_GET, убирая из него все ненужное, чтобы инъекции в него не сували. Возможно под одно и $_POST у вас фильтруют, но как-то криво. Либо еще какой-то плагин перехватывает и отрезает все. Но что-то определенно должно ее ломать, сама себя сломать она не может, суперглобальные массивы - это просто массивы, они просто содержат данные, которые уже используют скрипты. Введите свой код в самом начале сайта (прям в index.php), если выводится чистое значение - значит опускайте дальше и снова проверяйте, пока не найдете что лее ломает. Только так. А кому сейчас легко?)
Ответ написан
Комментировать
@RozenZwei
Это особенность POST - пробелы обрывают тело сообщения.

Чтобы избежать этого, - оборачивайте в encodeURIComponent().
Он делает сообщение непрерывным.

Т.е. при отправке из js делайте не
data: "message=" + message
а
data: "message=" + encodeURIComponent(message)

И будет вам счастье.)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы