IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Conception Web Discussion :

Passage d'une variable html par href


Sujet :

Conception Web

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut Passage d'une variable html par href
    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

  2. #2
    Expert confirmé
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 683
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 683
    Par défaut
    d'où vient cette variable $html ? d'un paramètre de l'url ?
    pour vérifier si le code php récupère bien les paramètres, affichez le contenu de $_GET avec la fonction suivante par exemple qui affichera dans le code HTML, n'importe quelle variable composée d'objets, tableaux, code XML ou valeurs TRUE, FALSE ou NULL,
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function aff($var)
    {
    	echo "<pre>";
    	echo htmlspecialchars(var_export($var, TRUE));
    	echo "</pre>";
    }

  3. #3
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut
    $html est déclarée dans la vue :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    $html='';
    //...
    $html=ob_get_contents();

    puis est passée dans l'url depuis la vue par :

    Code html : Sélectionner tout - Visualiser dans une fenêtre à part
    <a href='/PDF/telecharger/<?= $html ?>'>télécharger en PDF</a>

    pour être récupérée par PDFController qui la passe dans la fonction telecharger($html)


    aff($html) appliquée en fin de vue affiche la totalité du code html (depuis ob_start())


    lorsque je passe $html dans l'url en cliquant sur le lien href
    mon url affiche .../PDF/telecharger
    ce qui provoque naturellement une fatal error puisque telecharger() doit recevoir 1 argument ($html) et qu'il ne reçoit rien (0 argument)

    lorsque je passe en url $html1='blabla'
    mon url affiche .../PDF/telecharger/blabla
    la fenêtre de téléchargement s'ouvre et propose vue.pdf
    lequel pdf contient bien blabla

    => c'est la présence de < ou . ou ! ou ... dans $html qui bloque le passage de $htmlau controller lequel est bel et bien instancié

  4. #4
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut
    une précision qui peut avoir une importance

    lorsque je passe par exemple $html1='blabla<>', l'url affiche .../PDF/telecharger/blabla<>
    et le serveur renvoie un
    Not Found The requested URL was not found on this server.

  5. #5
    Membre averti
    Homme Profil pro
    débutant
    Inscrit en
    Mai 2016
    Messages
    56
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : débutant

    Informations forums :
    Inscription : Mai 2016
    Messages : 56
    Par défaut
    problème résolu : $html contient des caractères non autorisés par RewriteRule...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 18/08/2017, 10h23
  2. [Tableaux] passage d'une variable par référence
    Par grinder59 dans le forum Langage
    Réponses: 7
    Dernier message: 14/05/2007, 17h52
  3. passage d'une variable javascript dans du html
    Par the_ugly dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 01/02/2006, 16h08
  4. passage d'une variable en parametre
    Par duga dans le forum Langage
    Réponses: 4
    Dernier message: 11/09/2005, 12h19
  5. [C#] Passage d'une variable pour un controluser
    Par julio84 dans le forum ASP.NET
    Réponses: 10
    Dernier message: 07/04/2005, 13h50

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo