Bonjour à tous,

je travaille sur une appli MVC avec réécriture d'url en Controller/Function/paramètres.

comme je dois convertir une vue en pdf, j'ai intégré dompdf de la façon suivante
- une classe PDF\dompdf
- un PDFController avec une fonction telecharger($html)

Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?php
namespace App\Controllers;
require_once ('...dompdf/autoload.inc.php');
use Dompdf\Dompdf;
use Dompdf\Options;
 
class PDFController extends Controller
{
 
    public function telecharger($html)
    {
        $options=new Options();
        $options->set('defaultFont','arial');
        $pdf = new Dompdf($options);
        $pdf->loadHtml($html);
        $pdf->setPaper('A4','portrait');
 
        $pdf->render();
        $fichier='vue.pdf';
        $pdf->stream($fichier);
    }
}

ma vue à télécharger est enregistrée en buffer

Code html : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
<a href='/PDF/telecharger/<?=$html?>'>télécharger en PDF</a>
 
<?php ob_start();?>
<!DOCTYPE html>
<html lang="fr">
 
<...>
 
</html>
 
<?php 
$html=ob_get_contents();
ob_end_flush();


le problème : $html ne passe pas au PDFController.

lorsque j'essaie avec $html1='blabla', ça passe et j'obtiens mon vue.pdf contenant blabla

bien que $html soit très long (Length=85118), il ne semble pas que ce soit le problème :

je n'ai identifié qu'une discussion sur la longueur du href :
https://www.developpez.net/forums/d4...f-taille-maxi/
mais elle n'apporte aucune piste.

car lorsque j'essaie avec $html1='<h1>blabla</h1>'; ça ne passe également pas

Manifestement certains caractères ne passent pas :
l'espace : $html1='bla bla' ne passe pas
le point : $html1='bla.bla' ne passe pas
le point d'exclamation : $html1='blabla!' ne passe pas
etc

je n'ai pas eu plus de succès avec htmlentities ou htmlspecialchars :

coté vue
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
$html1='blabla!';
$html1=htmlspecialchars($html1);
//ou
//$html1=htmlentities($html1);

coté controller
Code php : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
$pdf->loadHtml(htmlspecialchars_decode($html));
//ou
//$pdf->loadHtml(html_entity_decode($html));

ne passent pas non plus


il y a peut être des erreurs de code, mais si non comment faire ?

merci de vos remarques et propositions