Journal Sessions PHP et validation HTML

Posté par  (site web personnel) .
Étiquettes : aucune
0
16
juin
2004
Je travaille en ce moment sur une page web PHP utilisant des sessions. PHP me créée donc des URLs du type "" , avec le & qui n'est pas converti en & amp; .
D'où la page ne passe pas quand on tente de la valider avec le validateur du W3C.
Je ne vois pas trop comment m'en sortir... Google étant mon ami, j'ai trouvé une page où on montrait comme intercepter le SID : http://www.nexen.net/docs/php/annotee/session.idpassing.php(...) et http://be2.php.net/manual/fr/ref.session.php#session.idpassing.(...)
Mais c'est un peu lourd (à faire pour toutes les URLs internes).
Qqn a une idée plus simple ?
  • # peut être la solution

    Posté par  . Évalué à 2.

    ini_set('arg_separator.output', '&amp');

    avant d'ouvrir ta session
    • [^] # Re: peut être la solution

      Posté par  (site web personnel) . Évalué à 3.

      Et si il veut un truc correct avec les formulaires en strict, il faut aussi virer le 'form=' de la "url_rewriter.tags" et prier pour que ca soit le seul probleme (sinon php rajoute un input hidden au mauvais endroit dans le form)

      Le plus simple est quand meme de virer trans_id, qui pose de sacrés problemes de secu entre autres.
    • [^] # Re: peut être la solution

      Posté par  (site web personnel) . Évalué à 2.

      Ca semblait une très bonne idée mais malheureusement Online.fr n'aime pas du tout :

      Warning: ini_set, exec, passthru, system, popen, leak, mysql_list_dbs, listen, chown, chmod, chgrp, diskfreespace, rmdir, realpath, tmpfile, link, imap_mail() has been disabled for security reasons in index.php on line 5
      • [^] # Re: peut être la solution

        Posté par  . Évalué à 3.

        au début de ton script :

        function my_htmlentities($str) {
        $str = htmlentities(html_entity_decode($str));
        $str = str_replace(""", '"', $str);
        return $str;
        }

        function xhtmlize($str) {
        if(preg_match_all("/<(.+?)>/msi", $str, $parts)) {
        while(list($i, $val)=each($parts[0])) {
        $str = str_replace($parts[0][$i], "<".my_htmlentities($parts[1][$i]).">", $str);
        }
        }
        return $str;
        }
        ob_start("xhtmlize");

        A la fin:

        ob_end_flush();

        En gros, ça va faire htmlentites() dans tout ce qu'il y a entre < et >. Si tu as déja mis &amp; dans tes liens, ne t'en fait pas, ça enlève tout ce qui est balise html avant (remplace &amp; par &). SI tu veux remplacer autrement (par une regexp plus complexe), remplace simplement le contenu de xhtmlize

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.