Неверно обрабатывается UTF-8 в response()->setStatusCode() в Laravel

281
17 февраля 2017, 04:35

Есть некая форма, с которой отправляются некие данные, отправляются через функцию $.ajax():

f.on('submit', function (e) {
        var d = f.serialize();
        e.preventDefault();
        $.ajax({
            url: u,
            type: 'POST',
            data: d,
            dataType: 'json',
            beforeSend: b,
            error: function (jqXHR) {
                //
            },
            success: function (data, textStatus, jqXHR) {
                // внимание сюда, отдельно радует наличие textStatus и jqXHR.statusText
                alert(jqXHR.statusText);
            }
        });
    });

На мой взгляд, более верно передавать сообщения о статусе ответов в специально расположенном для этого месте, в jqXHR.statusText, а data оставлять либо пустым, либо наполнять реальными данными.

В этом случае у нас не будет путаницы с содержанием ответов, когда там бывает то json, то text, который возможно стоит не выводить обычным текстом, а оборачивать в бессмысленный json, ради унификации кода.

Это может быть важным, когда мы используем стандартные функции по обработке submit форм, когда все типы получаемых и отправляемых данных желательно привести к единому виду. Соответственно, в контроллере мы (пытаемся) делаем нечто такое:

public function contactUs(ContactUsRequest $request)
    {
        // что-нибудь
        return response(json_encode([... массив / пустота ...]))
            ->header('Content-Type', 'application/json')
            ->header('charset', 'utf-8')
            ->setStatusCode(201, 'Сообщение успешно отправлено.')
            ;
    }

Проблема в том, что при установке кодировки подобным образом это влияет только лишь на выводимые массив / пустота (я проверял), а вот на statusText - нет, не влияет, получим привычную абракадабру, которая обычно получается при неверной обработке utf-8.

Так вот, вопрос: в чем может быть проблема? У меня лично три варианта:

  1. Баг Laravel.
  2. Ограничение стандарта по выводу сообщений о статусе http-ответов.
  3. Я что-то упускаю и делаю не так.

Зачем мне такой код? В целом незачем, просто изучаю тонкости.

Answer 1

Похоже сам нашел ответ на свой вопрос здесь. Причин не делать так, как я описал, то есть не использовать utf-8 в статусе ответа от сервера, две:

  1. Кодировка данного текста не определена, а значит использовать не ASCII символы бесполезно.
  2. В стандарте HTTP/2 этот текст в принципе не используется, так что рано или поздно от него придется отказаться.
READ ALSO
Как найти центр фигуры?

Как найти центр фигуры?

Функция, находящая центр фигуры уже естьНо похоже, она работает не правильно

527
После клика на ссылку, при загрузке страницы сохранить прежние настройки. jquery

После клика на ссылку, при загрузке страницы сохранить прежние настройки. jquery

Добрый деньУ меня есть боковое меню и при клике оно должно быть таким

546
Можно ли подключить шеринг от Яндекса через класс

Можно ли подключить шеринг от Яндекса через класс

Есть у меня постраничный слайдер, в каждом слайде отдельная статьяДля каждой статьи свой блок с шерингом

324