как правильно отформатировать эту строку для использования в URL - PullRequest
0 голосов
/ 30 марта 2019

Я пытаюсь создать изображение диаграммы, которую я использую, чтобы я мог вставить ее в PDF.Я использую chart.js для создания диаграммы - хотя я использую https://quickchart.io/ для создания диаграммы, передавая информацию о диаграмме в quickchart url.

Затем я пытаюсьдобавьте его в pdf, используя tcpdf.

. Строка, которую я создаю из некоторых массивов:

$genderGraph = "https://quickchart.io/chart?c={type: 'doughnut',data:{labels:" . json_encode($genderchartjs['label']) . ", datasets: [{data:" . json_encode($genderchartjs['data']) . ",backgroundColor:" . json_encode($chartcolors) . "}]}}";

И если я повторяю, что $genderGraph следует приведенному выше:

https://quickchart.io/chart?c={type: 'doughnut',data:{labels:["Male","Female","Unknown"], datasets: [{data:[16,34,17],backgroundColor:["rgba(255, 99, 132, 1)","rgba(54, 162, 235, 1)","rgba(255, 206, 86, 1)","rgba(75, 192, 192, 1)","rgba(153, 102, 255, 1)","rgba(255, 159, 64, 1)","rgba(0, 0, 0, 1)"]}]}}

Который, если вы вставите в адресную строку браузера, покажет вам правильное изображение диаграммы, в точности так, как я этого хочу.

Проблема заключается в том, когда я пытаюсь добавить изображениев PDF, используя file_get_contents()

$img = file_get_contents($genderGraph);
$pdf->Image('@' . $img);

Я получаю следующее предупреждение:

Предупреждение (2): file_get_contents (https://quickchart.io/chart?c={type: «пончик», данные:{label: ["Male", "Female", "Unknown"], наборы данных: [{data: [16,34,17], backgroundColor: ["rgba (255, 99, 132, 1)", "rgba (54, 162, 235, 1) "," rgba (255, 206, 86, 1) "," rgba (75, 192, 192, 1) "," rgba (153, 102, 255, 1) ","rgba (255, 159, 64, 1) "," rgba (0, 0, 0, 1) "]}]}}): не удалось открыть поток: ошибка HTTP-запроса!HTTP / 1.1 400 Bad Request

Похоже, что проблема с форматированием URL, что мне нужно сделать, чтобы это исправить?

1 Ответ

0 голосов
/ 30 марта 2019

Позволяет открыть документ для file_get_contents() здесь

Примечание:

Если вы открываете URI со специальнымсимволы, например пробелы, необходимо кодировать URI с помощью функции urlencode ().

Вы должны закодировать параметр запроса, используя urlencode или лучше http_build_query

Пример:

<?php
$url = 'https://quickchart.io/chart';

// replace with your string
$c = "{type: 'doughnut',data:{labels:[\"Male\",\"Female\",\"Unknown\"], datasets: [{data:[16,34,17],backgroundColor:[\"rgba(255, 99, 132, 1)\",\"rgba(54, 162, 235, 1)\",\"rgba(255, 206, 86, 1)\",\"rgba(75, 192, 192, 1)\",\"rgba(153, 102, 255, 1)\",\"rgba(255, 159, 64, 1)\",\"rgba(0, 0, 0, 1)\"]}]}}";

$url = $url . '?' . http_build_query([
    'c' => $c
]);

$image = file_get_contents($url);
// pdf
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...