problème ouverture fichier avec apostrophe

Répondre
ahmet57
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 -- &#146;*/
$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(' ','&#160;',$lien_ind1);
$lien_ind1 = str_replace('\'','%27',$lien_ind1);// %27 -- &#146;
$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>";
...
LupusMic
le 04/05/2006 à 15:12
LupusMic
Elles servent à quoi les fonctions Javascript ?
Développeur récurrent, procédural et relationnel. Caustique soupe-au-lait.
ahmet57
le 04/05/2006 à 15:26
ahmet57
à ouvrir un fichier word ou excel ou ppt


//ouverture de fichier powerpoint
function OuvrirPPT(inChemin,url)
{
var myApp = new ActiveXObject("powerpoint.Application");
if (myApp != null)
{
myApp.Visible = true;
myApp.Presentations.Open(inChemin);
location.href=""+url+"";

myApp.terminate();
myApp="";
}

}

//ouverture de fichier word
function OuvrirDOC(inChemin,url)
{
var myApp = new ActiveXObject("word.Application");
if (myApp != null)
{
myApp.Visible = true;
myApp.Documents.Open(inChemin);
location.href=""+url+"";

myApp.terminate();
myApp="";
}

}

//ouverture de fichier excel
function OuvrirXLS(inChemin,url)
{
var myApp = new ActiveXObject("Excel.Application");
if (myApp != null)
{
myApp.Visible = true;
myApp.Workbooks.Open(inChemin);
location.href=""+url+"";

myApp.terminate();
myApp="";
}

}
Bzh
le 04/05/2006 à 15:51
Bzh
Essaye avec addslashs() !

Elle permet de rajouter un \ devant les caratères du style 'et " !

Bye et bonne continuation...
ahmet57
le 04/05/2006 à 15:56
ahmet57
J'ai déjà utilisé cette fonction

Quelqu'un aurait une autre solution ??
Bzh
le 04/05/2006 à 16:03
Bzh
Bon j'ai pas le temps cette aprèm d'appronfondir ton script !

Mais j'ai vraiment l'impression que tu t'embrouilles dans les \ !

$CheminObjectifs = str_replace('\\','\\\\',$lien_ind);


Passer des arguments entre php et javascript n'est pas simple lorsqu'il y a des caratères actifs...

Le str_replace du dessu ne fais rien de plus que ferait la fonction addslashs() !

Revois ta façon de potèger tes caratères en employant la fonction addslashs().
ahmet57
le 04/05/2006 à 16:09
ahmet57
Je vois ce qu'est la fonction addslash, je l'ai utilisé dans un autre fichier,

Je suis d'accord que dans ce cas je peux remplacer le str_replace par addslash.

Mais la n'est pas le problème. Car j'arrive àouvrir tous mes fichiers ( ca prouve que ça fonctionne) sauf cceux qui comporte une apostrophe ...
Bzh
le 04/05/2006 à 16:16
Bzh
Et bien oui ! Puisque tu ne protèges pas les ' et les " !

' et " sont des caratères actifs tout comme \ !

Or ta fonction ne protège QUE \ !

Contrairement à addslashs qui te protêgera TOUS les caratères actifs comme ' et " !
ahmet57
le 04/05/2006 à 16:29
ahmet57
C'est bizarre parcequ'avec addslashes il me dit que le fichier n'existe pas .

C'est peut être du au slash qu'il rajoute devant l'apostrophe ??

Parceque lorsque j'ajoute un slash seulement devant les autres salsh avec str_replace, il me dis au moins que le fichier existe ???
Bzh
le 04/05/2006 à 17:16
Bzh
Oui mais c'est pas ça le souci !!!

Le souci est que tu passes des paramettres à Monsieur javascript !

Et là, sa complique TOUT ! Faut regarder dans la source HTML de ta page l'état du chemin du fichier...

Lorsque php écrit dans la sources, des \ disparaissent ! Donc faut penser ensuite à javascript !

Il est obligatoire que le chemin ne sera pas valide pour PHP s'il l'est pour JAVASCRIPT !(si le chemin contient des apastrophes)

Il faut que tu regardes dans la source html...
Répondre

Ecrire un message

Votre message vient d'être créé avec succès.
LoadingChargement en cours