le 04/05/2006 à 14:13
ahmet57
Bonjour,
voila mon problème.
J'ai un programme PHP qui ouvre des fichiers word, excel, ppt connaissant le chemin du fichiers (récupérer depuis une champ d'une base de données)
Lorsque je click sur un lien, il m'ouvre le fichier correspondant à ce lien.
Par contre j'ai un problème avec l'ouverture de fichier dont le chemin comporte une apostrophe (').
J'ai procédé de la façon suivante.
J'ai des focntions javascript qui me permettent d'ouvrir des fichiers excel, word, ppt, en entrant le chemin du fichier comme paramètre d'entré.
Par contre les caractères spéciaux m'ont posés des problèmes (j'ai du remplacé l'espace par %20 et le & par %26 qui correspondent à leur valeur hexadécimal).
Avec cette manipulation, ca fonctionnait correctement.
Par contre, j'ai des chemins qui comportent des apostrophes, j'ai procédé de la même façon en remplacant ce caractère par son code hexa mais pour ces fichiers ça fonctionne pas.
Pourtant, il m'affiche bien le chemin du fichier correctement, et me dit que le fichier existe mais il ne me l'ouvre pas.
Pouvais vous m'aider svp c'est urgent ???
Merci
voila un bou de la programmation
.........
if ($var==1 && $lien_ind!="")
{
$OutputBarreH .= "<form name='formListPages' method='POST'>";
$lien_ind=trim($lien_ind);
$lien_ind = str_replace('%20',' ',$lien_ind);
$lien_ind = str_replace('%26','&',$lien_ind);
$lien_ind = str_replace('%27','\'',$lien_ind);//%27 -- ’*/
$lien_ind = str_replace('%40','@',$lien_ind);
$lien_ind = str_replace('%3B',';',$lien_ind);
$CheminObjectifs = str_replace('\\','\\\\',$lien_ind);
if (file_exists($CheminObjectifs))
{
$FichierExiste = True;
}
if ($FichierExiste)
{
$longueur=strlen($CheminObjectifs);
$typefichier=substr($CheminObjectifs,$longueur-3);
$OutputBarreH .= "<script language=\"JavaScript\">";
$OutputBarreH .="<!-- ".chr(13);
if($typefichier=="doc")
{
$OutputBarreH .=" OuvrirDOC('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";
}
if($typefichier=="ppt")
{
$OutputBarreH .=" OuvrirPPT('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";
}
if($typefichier=="xls")
{
$OutputBarreH .=" OuvrirXLS('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";
}
$OutputBarreH .=" //--> ";
$OutputBarreH .=" </script> ";
$OutputBarreH .= "</form>";
}
}
.......
$Requete = "SELECT stru_id, stru_intitule,stru_departement,stru_service,stru_etatmois, stru_cumulan, stru_prevision ,stru_comment1, stru_comment2,stru_lien_ind ";
$Requete .= "FROM structure WHERE stru_niveau = $Niveau AND stru_pere_id = $IndexObjectif ORDER BY stru_intitule";
$Resultat = MySQL_Query($Requete) or die ('Erreur de requête : '.mysql_errno().',<br> '.mysql_error().',<br> '.$Requete);
while($ctItem = mysql_fetch_array($Resultat))
{
$Intitule = $ctItem["stru_intitule"];
$Id = $ctItem["stru_id"];
$IdIco = $Id;
$Dept = $ctItem["stru_departement"];
$Serv = $ctItem["stru_service"];
$lien_ind1 = $ctItem["stru_lien_ind"];
$lien_ind1 = trim($lien_ind1);
$lien_ind1 = str_replace(' ','%20',$lien_ind1); // sinon il n'arrive pas à trouver le fichier
$lien_ind1 = str_replace('&','%26',$lien_ind1);
//$lien_ind1 = str_replace(' ',' ',$lien_ind1);
$lien_ind1 = str_replace('\'','%27',$lien_ind1);// %27 -- ’
$lien_ind1 = str_replace('@','%40',$lien_ind1);
$lien_ind1 = str_replace(';','%3B',$lien_ind1);
...
$Output[$j] .= "<td width='40' height='5'><a href=index.php?Niveau=$Niveau&IndexObjectif=$IndexObjectif&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&var=1&chem=$lien_ind1&Ancre=0>$Serv</a> </td>";
...
voila mon problème.
J'ai un programme PHP qui ouvre des fichiers word, excel, ppt connaissant le chemin du fichiers (récupérer depuis une champ d'une base de données)
Lorsque je click sur un lien, il m'ouvre le fichier correspondant à ce lien.
Par contre j'ai un problème avec l'ouverture de fichier dont le chemin comporte une apostrophe (').
J'ai procédé de la façon suivante.
J'ai des focntions javascript qui me permettent d'ouvrir des fichiers excel, word, ppt, en entrant le chemin du fichier comme paramètre d'entré.
Par contre les caractères spéciaux m'ont posés des problèmes (j'ai du remplacé l'espace par %20 et le & par %26 qui correspondent à leur valeur hexadécimal).
Avec cette manipulation, ca fonctionnait correctement.
Par contre, j'ai des chemins qui comportent des apostrophes, j'ai procédé de la même façon en remplacant ce caractère par son code hexa mais pour ces fichiers ça fonctionne pas.
Pourtant, il m'affiche bien le chemin du fichier correctement, et me dit que le fichier existe mais il ne me l'ouvre pas.
Pouvais vous m'aider svp c'est urgent ???
Merci
voila un bou de la programmation
.........
if ($var==1 && $lien_ind!="")
{
$OutputBarreH .= "<form name='formListPages' method='POST'>";
$lien_ind=trim($lien_ind);
$lien_ind = str_replace('%20',' ',$lien_ind);
$lien_ind = str_replace('%26','&',$lien_ind);
$lien_ind = str_replace('%27','\'',$lien_ind);//%27 -- ’*/
$lien_ind = str_replace('%40','@',$lien_ind);
$lien_ind = str_replace('%3B',';',$lien_ind);
$CheminObjectifs = str_replace('\\','\\\\',$lien_ind);
if (file_exists($CheminObjectifs))
{
$FichierExiste = True;
}
if ($FichierExiste)
{
$longueur=strlen($CheminObjectifs);
$typefichier=substr($CheminObjectifs,$longueur-3);
$OutputBarreH .= "<script language=\"JavaScript\">";
$OutputBarreH .="<!-- ".chr(13);
if($typefichier=="doc")
{
$OutputBarreH .=" OuvrirDOC('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";
}
if($typefichier=="ppt")
{
$OutputBarreH .=" OuvrirPPT('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";
}
if($typefichier=="xls")
{
$OutputBarreH .=" OuvrirXLS('".$CheminObjectifs."','index.php?Niveau=".$Niveau."&IndexObjectif=".$IndexObjectif."&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&Niveau=$Niveau&Departement=&Service=&Ancre=0')";
}
$OutputBarreH .=" //--> ";
$OutputBarreH .=" </script> ";
$OutputBarreH .= "</form>";
}
}
.......
$Requete = "SELECT stru_id, stru_intitule,stru_departement,stru_service,stru_etatmois, stru_cumulan, stru_prevision ,stru_comment1, stru_comment2,stru_lien_ind ";
$Requete .= "FROM structure WHERE stru_niveau = $Niveau AND stru_pere_id = $IndexObjectif ORDER BY stru_intitule";
$Resultat = MySQL_Query($Requete) or die ('Erreur de requête : '.mysql_errno().',<br> '.mysql_error().',<br> '.$Requete);
while($ctItem = mysql_fetch_array($Resultat))
{
$Intitule = $ctItem["stru_intitule"];
$Id = $ctItem["stru_id"];
$IdIco = $Id;
$Dept = $ctItem["stru_departement"];
$Serv = $ctItem["stru_service"];
$lien_ind1 = $ctItem["stru_lien_ind"];
$lien_ind1 = trim($lien_ind1);
$lien_ind1 = str_replace(' ','%20',$lien_ind1); // sinon il n'arrive pas à trouver le fichier
$lien_ind1 = str_replace('&','%26',$lien_ind1);
//$lien_ind1 = str_replace(' ',' ',$lien_ind1);
$lien_ind1 = str_replace('\'','%27',$lien_ind1);// %27 -- ’
$lien_ind1 = str_replace('@','%40',$lien_ind1);
$lien_ind1 = str_replace(';','%3B',$lien_ind1);
...
$Output[$j] .= "<td width='40' height='5'><a href=index.php?Niveau=$Niveau&IndexObjectif=$IndexObjectif&ObjectifAChanger=-1&EtatObjectif=-1&Submit=0&EtatAffich=$EtatAffich&strategie=$strategie&ServiceCode=$ServiceCode&var=1&chem=$lien_ind1&Ancre=0>$Serv</a> </td>";
...