Erreur lors de l'eval(). Escape, Unescape ?

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Erreur lors de l'eval(). Escape, Unescape ?

par Ryle » 07 août 2007, 13:33

Du tout, c'est tout simplement du au fait qu'ils sont présents dans le fichier que tu ouvres, et comme php est pas du genre contrariant, il les gardes quand tu le lis :)

Tu peux faire un str_replace() sur ta variable php pour supprimer les \r\n et \n, et ainsi dans ton code javascript n'avoir qu'une seule ligne.. c'est pas gégé, mais ça t'évitera au moins ce problème :)

par drannh » 07 août 2007, 10:22

ok...

reste à savoir pourquoi j'ai ces retours à la ligne...
voici ma fonction qui récupère le code source d'un fichier :
function get_document($url) {
    $file = fopen ($url,"r");
    if (!$file) {
        return null;
    }
    $doc = "";
    while (!feof ($file))
       $doc .= fgets ($file, 1024);
    fclose($file);
    return $doc;
}
Ce serait dû aux 1024 octets ?

par Ryle » 07 août 2007, 10:11

En javascript, un retour à la ligne est considéré comme une fin d'instruction (équivalente au point virgule). Du coup, il tente juste d'exécuter l'instruction

Code : Tout sélectionner

document.getElementById("Main").innerHTML = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN
Et te dis que celle-ci ne se termine pas correctement :)

Erreur lors de l'eval(). Escape, Unescape ?

par drannh » 07 août 2007, 09:52

Bonjour à tous,

Cela fait 2 jours que je cherche une solution introuvable à un problème..
Alors voici, j'ai une procedure AJAX dont le script php récupère le code-source d'un fichier htm pour le renvoyer au script JS qui fait un "eval()" dessus, afin d'afficher la page. Je passe par php pour faire ca car ca me permet de convertir en ISO mais aussi de renvoyer d'autres données en plus du code source de la page. Cependant, ça ne fonctionne pas, je reçoit cette erreur-ci (dans une console debug de Firefox) :

unterminated string literal
document.getElementById("Main").innerHTML = "<!DOCTYPE html PUBLIC \"-//W3C//DTD...

Le message qui provoque cette erreur et a été envoyé du PHP vers le JS :

Code : Tout sélectionner

document.getElementById("Main").innerHTML = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Strict//EN \" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd\"> <html xmlns=\"http://www.w3.org/1999/xhtml\" xml:lang=\"fr\" lang=\"fr\"> <head> <meta http-equiv=\"Content-Type\" content=\"text/html; charset=ISO-8859-15\"> <title>Pseudo</title> <script language=\"JavaScript\" type=\"text/javascript\" src=\"jsScripts/Login/ValidNewUser.js\"></script > <script language=\"JavaScript\" type=\"text/javascript\" src=\"jsScripts/Useful.js\"></script> <script language=\"JavaScript\" type=\"text/javascript\" src=\"jsScripts/Engine.js\"></script> <script language=\"JavaScript\" type=\"text/javascript\" src=\"jsScripts/LoadPage.js\"></script> </head> <body onLoad=\"IsJsEnabled()\"> <div id=\"divFrmNewUser\"> <form action=\"javascript:EngineInit(\'NewUser\')\" onSubmit=\"return ValidForm()\" method=\"post\" name=\"frmNewUser\"> <br><br><br> <table width=\"100%\" border=\"0\"> <tr> <td width=\"95\" align=\"right\" valign=\"middle\"><font size=\"1\" face=\"Verdana\">Login é</font></td> <td width=\"129\"><input type=\"text\" name=\"T1\" size=\"20\" onblur=\"Validation(this) ;javascript:EngineInit(\'CheckUser\');\" /></td> <td width=\"18\"><div id=\"errT1icon\" style=\"vertical-align:middle;font-size:0px\"></div></td> <td width=\"100%\"><div id=\"errT1\" style=\"font-family: Verdana; font-size: 10px; color :#FF0000; font-style:italic;vertical-align:middle;\"></div></td> </tr> <tr> <td align=\"right\" valign=\"middle\"><font size=\"1\" face=\"Verdana\">Password</font>< /td> <td><input type=\"password\" name=\"T2\" size=\"20\" onblur=\"Validation(this)\" /></td> <td><div id=\"errT2icon\" valign=\"middle\"></div></td> <td><div id=\"errT2\" valign=\"middle\" style=\"font-family: Verdana; font-size: 10px; color :#FF0000; font-style:italic\"></div></td> </tr> <tr> <td align=\"right\" valign=\"middle\"><i><font face=\"Verdana\" style=\"font-size: 10px\" >Confirmation</font></i></td> <td><input type=\"password\" name=\"T3\" size=\"20\" onblur=\"Validation(this)\" /></td> <td valign=\"middle\"><div id=\"errT3icon\" valign=\"middle\"></div></td> <td><div id=\"errT3\" valign=\"middle\" style=\"font-family: Verdana; font-size: 10px; color :#FF0000; font-style:italic\"></div></td> </tr> <tr> <td align=\"right\" valign=\"middle\"><font face=\"Verdana\" size=\"1\">E-mail</font></td > <td><input type=\"text\" name=\"T4\" size=\"20\" onblur=\"Validation(this);javascript:EngineInit (\'CheckMail\')\" /></td> <td valign=\"middle\"><div id=\"errT4icon\" valign=\"middle\"></div></td> <td><div id=\"errT4\" valign=\"middle\" style=\"font-family: Verdana; font-size: 10px; color :#FF0000; font-style:italic\"></div></td> </tr> <tr> <td align=\"right\" valign=\"middle\"><font face=\"Verdana\" size=\"1\">Ville</font></td > <td><input type=\"text\" name=\"T5\" size=\"20\" onblur=\"Validation(this)\" /></td> <td valign=\"middle\"><div id=\"errT5icon\" valign=\"middle\"></div></td> <td><div id=\"errT5\" valign=\"middle\" style=\"font-family: Verdana; font-size: 10px; color :#FF0000; font-style:italic\"></div></td> </tr> <tr> <td align=\"right\">&nbsp;</td> <td><input type=\"hidden\" name=\"FieldJsEnabled\" value=\"false\" /></td> <td valign=\"middle\">&nbsp;</td> <td>&nbsp;</td> </tr> </table> <br><br> <p><input type=\"submit\" value=\"Submit\" name=\"B1\"><input type=\"reset\" value=\"Reset\" name= \"B2\"></p> </form></div> </body> </html>";document.getElementById("StatusPhp").innerHTML = "<fieldset><legend>PHP_Status</legend><p><font style=\"color:#999999\">Transfert des données : 0ms</font><br></p></fieldset>";document.getElementById ("StatusPage").innerHTML = "<fieldset><legend>Page_Loading_Time</legend><p><font style=\"color:#009900 \">1ms</font><br></p></fieldset>";

Et le code PHP :
<?php
 
header('Content-Type: text/html; charset=ISO-8859-15');
  
require_once ('phpScripts/Useful.php');
$dummy1 = BenchmarkFullPage();
$dummy2 = Benchmark('dummy');
 
extract($_POST);
$url = htmlentities(trim(utf8_decode($url)));
$log = SetErrColor(Benchmark('Transfert des données'),'Grey'); 

echo 'document.getElementById("Main").innerHTML = "'. addslashes(get_document($url)) . '";';
 
$FullPageTiming = SetFullPageTiming(BenchmarkFullPage());
echo 'document.getElementById("StatusPhp").innerHTML = "<fieldset><legend>PHP_Status</legend><p>' . $log . '</p></fieldset>";';
echo 'document.getElementById("StatusPage").innerHTML = "<fieldset><legend>Page_Loading_Time</legend><p>' . $FullPageTiming . '</p></fieldset>";';
?>

Est-ce que ce problème pourrait venir du fait que je n'utilise pas les escape() et unescape() ?? A cause des espaces dans le source ? Franchement je ne sais plus du tout par où chercher... je désespère.. il y a un dicton qui dit que si un informaticien bute sur un problème, qu'il doit partir promener le chien, et qu'à son retour il trouvera la solution... hum, comment dire.. je n'ai pas de chien

Je vous remercie d'avance !
Seb.