@torns
Пишу код в удовольсвие

PHP: после json_encode, в js летят &quot?

2 часа "*екса" и гугла не увенчались успехом.
Готовлю данные для ChartJS, массив данные формирую в контроллере (laravel) и отправляю во view где и инийиализирую ChartJS
Код контроллера:
foreach ($report_current as  $stock) {
                if(empty($stock['statistic'])) continue; //У стока нет статистики
                foreach ($stock['statistic'] as $report) {
                    $activity['sale_current'] += $report['order'];
                    $activity['money_current'] += $report['money'];
                    $activity['chart_labels'][] = $stock['name_stock'];
                    $activity['sale_chart_data'][] = $report['order'];
                    $activity['money_chart_data'][] = $report['money'];
                    $activity['chart_colors'][] = $stock['color_stock']; //Разобраться с quot
                    //var_dump($sale);die;
                }
            }

$stock['color_stock'] хранится в бд как строка - #323546
Ок, отправил, так как $activity['chart_colors'] это массив с массивами, я привожу его к JSON строке
(вся эта лапша для наглядности)
$bc = $activity['chart_colors'];
    $bc = json_encode($bc);
    //$bc = implode(',', $bc);
    //$bc = json_encode($activity['chart_colors'], JSON_HEX_QUOT);
    //$bc = preg_replace('"', 'zaeb', $bc);
    //$bc = preg_quote($bc);
    // $bc = htmlentities($bc);
    //$bc = htmlspecialchars_decode($bc);
    //var_dump($bc); die;

Потом вставляю данные в JS
var ctxx = document.getElementById('pie').getContext('2d');
    var myDoughnutChart = new Chart(ctxx, {
        type: 'pie',
        data: {
            datasets: [
            {
                data: {{ json_encode($activity['sale_chart_data']) }},
                backgroundColor: {{$bc}} -- сюда
                ,
            }]
        },
        options: {  
            responsive: true,
            maintainAspectRatio: false,
        }
    });


И JS не может распарсить скрипт из за: Uncaught SyntaxError: Unexpected token '&'.
так выглядит сформированный JS в консоли
datasets: [
            {
                data: [545,56,76,55,33],
                backgroundColor: ["#ff0000","#00ff00","#9bfc94","#a99dcc","#eeb363"]
                ,
            }]


А чтобы все было ОК надо вид такой: ['#453545','#5453545'] - и т.д.
Что делал:
1) preg_quote()
2) preg_replace()
3) htmlspecialchars_decode() и флаги ставил
4) Пробовал implode() и конкатенацию с кавычками чтобы получить просто нужную мне строку.

Такое ощущение что в PHP переменной этих спец символов нет, а при переходе в JS все КАВЫЧКИ преобразуются в спец символы.
  • Вопрос задан
  • 162 просмотра
Решения вопроса 2
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
@torns Автор вопроса
Пишу код в удовольсвие
Спасибо, пользователю nokimaro.
Закреплю здесь кусок документации.
По умолчанию весь выводимый контент экранируется, т.е. 
все элементы и сущности HTML показываются как есть, вместо того, 
чтобы обрабатываться браузером. 
Если вы не хотите, что бы данные экранировались, используйте следующий синтаксис:

Hello, {!! $name !!}.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы