Правильный способ разбора сбежал JSON в Laravel - PullRequest
0 голосов
/ 14 января 2020

В моем проекте Laravel (версия 6.6.2) у меня есть ситуация, в которой мне нужно передать объект (в частности, модель Eloquent) в представление, как JSON. Для этого я использовал следующий синтаксис:

{{ $model->toJson() }}

Проблема начинается с того, что мне нужны данные этой модели в переменной javascript, а использование JSON.parse не всегда работает, потому что иногда моя модель будет иметь символы, которые Laravel убегают в HTML сущностей. Однако передача строки unescaped также нежелательна из-за риска XSS.

Для правильного удаления этих данных я использовал эту функцию (основываясь на другом ответе здесь в SO, который я не могу найти в данный момент, чтобы ссылка):

function parseHtmlJson(raw) {
    var parser = new DOMParser();
    var html = parser.parseFromString(raw, "text/html");

    return JSON.parse(html.documentElement.textContent);
}

Однако эта функция также не идеальна, потому что, если любое из полей в моей модели имеет разрыв строки (или любой другой специальный символ, который Laravel не делает ' t escape) код взломает sh. Чтобы исправить , что я инкапсулировал свою модель с помощью addslashes:

{{ addslashes($model->toJson()) }}

Итак, вопрос в том, что весь этот подход кажется слишком многословным (может быть, даже уродливым), есть ли что-нибудь лучше? способ передать JSON с сервера в мои представления и проанализировать его?

PS : я знаю, что выборка моей модели с помощью вызова ajax полностью избавит от этой проблемы и я, вероятно, приму это, но я хотел бы знать альтернативы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...