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

Langage PHP Discussion :

Caractère -é- qui se transforme en -é-


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut Caractère -é- qui se transforme en -é-
    Bonjour j'ai un script qui doit aller recuperer le nom de mes repertoires et les inscrir dans une liste deroulante.
    Le scripte se passe bien mais sous linux, au lieu de me mettre des accents j'ai des caracteres speciaux du style . "é"



    Lorsque je force a mettre des accent, les dossier ne sont plus reconus (ce qui dans mon cas me fait des lien morts par la suite ... )


    Comment faire en sorte qu'a l'affichage les dossiers soit affiché correctement avec des accent "é" et que la variable garde toujours "é" pour que mes liens ne soit pas morts ?.?

    J'ai tenter pas mal de chose,l'encodage de ma page est en iso-15 mais sa ne vien pas de l'encodage car tout mes caractère speciaux son bien affiché, sa vien bien de mes dossiers !!!

    ( vu sous fillezilla )


    j'ai tenter de modifier uniquement l'affichage de mes select :

    l'original :

    Code : 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
    23
    24
    25
    26
    27
    28
    29
     
    	//chemin relatif vers le rep depuis le script
    	$chemin_repertoire = "../docs/";
    	echo "
    	<form action='index.php' method='POST' enctype='multipart/form-data'>
    	<select onchange='submit()' name='listeA'>
    	<option selected></option>
    	";
    	$dp = opendir($chemin_repertoire); // ouvre le repertoire
    	while ( $entrer = readdir($dp) )
    	{// enleve les fichiers . et ..
     
    		if ($entrer != '.' && $entrer != '..')
    		{//si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    			{//si c'est un repertoire
    			   echo "<option value='$entrer'";
    			   if(isset($_POST['listeA'])) 
    					{if($_POST['listeA'] == $entrer) 
    						echo " selected"; }
    					}echo ">$entrer</option>";
    			}
    		}
    	}
    	closedir($dp);
    	echo "
    	</select>
    	</form>
    	";



    code modifier
    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    echo "
    	<form action='index.php' method='POST' enctype='multipart/form-data'>
    	<select onchange='submit()' name='listeA'>
    	<option selected></option>
    	";
    	$dp = opendir($chemin_repertoire); // ouvre le repertoire
    	while ( $entrer = readdir($dp) )
    	{// enleve les fichiers . et ..
    		
    		if ($entrer != '.' && $entrer != '..')
    		{//si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    			{//si c'est un repertoire
    			   
    			   
    			   $entrer2 = str_replace ('é','é', $entrer);
    			   echo "<option value='$entrer2'";
    
    			   if(isset($_POST['listeA'])) 
    					{if($_POST['listeA'] == $entrer) 
    					{$entrer2 = str_replace ('é','é', $entrer);	
    						echo " selected"; }
    					}echo ">$entrer2</option>";
    			}
    		}
    	}
    	closedir($dp);
    	echo "
    	</select>
    	</form>
    	";
    sa ne marche pas, les repertoires sont bien listé avec des accents une bonne écriture mais ma deuxieme liste deroulante ne reconais pas les repertoires, du coups ma deuxieme liste est vide (or elle est censé me lister les sous-repertoires)


    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    mais sa ne vien pas de l'encodage car tout mes caractère speciaux son bien affiché
    Le système doit justement fournir les noms de fichier en UTF8 alors que ta page est en ISO.

    Utilise la fonction utf8_decode() sur les noms de fichier.

  3. #3
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    salut j'avais essayer la fonction que tu m'avais donner mais sa ne donne rien .
    je vais reessayer en la placant autre part ..

  4. #4
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
     
    $chemin_repertoire = "../docs/";
    	echo "
    	<form action='index.php' method='POST' enctype='multipart/form-data'>
    	<select onchange='submit()' name='listeA'>
    	<option selected></option>
    	";
    	$dp = opendir($chemin_repertoire); // ouvre le repertoire
    	while ( $entrer = readdir($dp) )
    	{// enleve les fichiers . et ..
     
    		if ($entrer != '.' && $entrer != '..')
    		{//si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    			{//si c'est un repertoire
    				if (mb_detect_encoding($entrer,"ISO-8859-1, UTF-8") == "UTF-8") {
    				$entrer = utf8_decode($entrer);
    }
    			   echo "<option value='$entrer'";
    			   if(isset($_POST['listeA'])) 
    					{if($_POST['listeA'] == $entrer) 
    						echo " selected"; }
    			}echo ">$entrer</option>";
    		}
    	}
     
    	closedir($dp);
    	echo "
    	</select>
    	</form>
    	";
    ?>
    voici mon code


    le resultat est le même

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    fais un
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    echo mb_detect_encoding($entrer,"ISO-8859-1, UTF-8");
    Comme ca on saura ou on en est.

  6. #6
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    voici mon code ..
    Code : 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
     
    if ($entrer != '.' && $entrer != '..')
    		{//si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    			{//si c'est un repertoire
     
    			   echo mb_detect_encoding($entrer,"ISO-8859-1, UTF-8");
    			   $toto= mb_detect_encoding($entrer,"ISO-8859-1, UTF-8");
    			   echo "<script>alert('$toto');</script>";
     
    			   echo "<option value='$entrer'";
    			   if(isset($_POST['listeA'])) 
    					{if($_POST['listeA'] == $entrer) 
    					echo " selected"; }
    			}echo ">$entrer</option>";
    		}
    le premier echo ne me retourne rien, mon pop up m'affiche " ISO-8859-1 "

  7. #7
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    j'ai forcer l'effacement des repertoires sudo -rm rf , il y en a des tout neuf, sous filezila cette fois ci je voit bien mes accents corrèctement, mais mon scripte me retourne toujours des é
    Auriez vous des suggestion que je pourrais tester ou une solution svp :

  8. #8
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    é c'est un "é" encodé en UTF8 qui essai d'etre lu comme du ISO-8859-1.
    Il faut donc bien que tu utf8_decode() tes noms.

  9. #9
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    é c'est un "é" encodé en UTF8 qui essai d'etre lu comme du ISO-8859-1.+1

    Je suis tout à fait d'accord avec toi, on le vois sur certains sites avec des pages au mauvais encodage.

    Mais je n'arrive pas a decoder les noms en utf8 , même avec decode

  10. #10
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Peux-tu nous montrer ton code ?

  11. #11
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    Code : 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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
     
    	//chemin relatif vers le rep depuis le script
    	$chemin_repertoire = "../dossier/";
    	echo "
    	<form action='index.php' method='POST' enctype='multipart/form-data'>
    	<select onchange='submit()' name='listeA'>
    	<option selected></option>
    	";
    	$dp = opendir($chemin_repertoire); // ouvre le repertoire
    	while ( $entrer = readdir($dp) )
    	{// enleve les fichiers . et ..
     
    	//if (mb_detect_encoding($entrer,"ISO-8859-1, UTF-8") == "UTF-8") 
    	//	{ $entrer = utf8_decode($entrer);}
     
    		if ($entrer != '.' && $entrer != '..')
    		{//si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    			{//si c'est un repertoire
     
    			/******/	
    			$entrer=utf8_decode ( $entrer  ) ;
    			/*******/
     
    			echo "<option value='$entrer'";
    			   if(isset($_POST['listeA'])) 
    			   {if($_POST['listeA'] == $entrer) 
    			 		{echo " selected"; }
    			   }echo ">$entrer</option>";
    			}
    		}
    	}
    	closedir($dp);
    	echo "
    	</select>
    	</form>
    	";
    ?>
    <br/>
    <br/>
    Dossier :
    <br/>
    <?php
    	if (isset($_POST['listeA'])) 
    	{
    		$repertoire = $_POST['listeA'];
    		//chemin relatif vers le rep depuis le script
    		$chemin_repertoire = "../docs/".$repertoire."/"; //chemin relatif complet du repertoire à lister (relatif par rapport à ce script)
    		echo "
    		<form action='index.php' method='POST' enctype='multipart/form-data'>
    		<select onchange='submit()' name='listeB'>
    		<option selected></option>
    		";
    		$dp = opendir($chemin_repertoire); // ouvre le rep
    		while ( $entrer = readdir($dp) )
    		{// enleve les fichiers . et ..
    		if ($entrer != '.' && $entrer != '..')
    			{ //si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    				{ //si c'est un repertoire
    				echo "<option value='$entrer'";
    				if(isset($_POST['listeB'])) 
    					{if($_POST['listeB'] == $entrer) 
    						{echo " selected"; }
    					} echo ">$entrer</option>";
    				}
    			}
    		}
    		closedir($dp);
    		echo "</select>
    		<input type='hidden' name='listeA' value='".$_POST['listeA']."'>
    		";
    	}
    ?>
    Cette fois ci le décodage marche bien je ne comprends plus rien moi ... Par contre le listage des répértoire ne marche plus tu peux m'aider stp .....

    pour résumer :

    Avant :
    - sur mon serveur les dossier avec accents étaient affiché é
    - le decode ne se faisait pas
    - le listage fonctionnait bien

    Après :
    - sur mon serveur les dossier avec accents son affiché avec des é
    - decode et encode marchent bien
    - le listage ne se fait ni avec les é ni avec les accents

  12. #12
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    if ($entrer != '.' && $entrer != '..')
    		{//si pas . et ..
    			if (is_dir($chemin_repertoire."/".$entrer))
    			{//si c'est un repertoire
    			
    			
    			$nom_doss=utf8_decode ( $entrer  ) ;
    		
    
    			echo "<option value='$entrer'";
    			   if(isset($_POST['listeA'])) 
    			   {if($_POST['listeA'] == $entrer) 
    			 		{echo " selected"; }
    			   }echo ">$nom_doss</option>";
    j'ai enfin trouver une parade .... je test et je te dit ça !!

  13. #13
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    en faite c'est bon que pour l'affichage ...

    Après je ne retrouve pas mes documents et dans ma base de données , l'enregistrement se fait de cette sorte :

    Mé au lieu de Mé .... donc encore un problème a régler pour l'enregistrement!

  14. #14
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    Allez dans la foulé une modif pour la "listeB" . La modif est identique a celle de la "listeA".
    Puis je récupere les deux valeur avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    //*****  enregistrer les valeurs au bon format 
    $listeA=utf8_decode ( $listeA  );  
    $listeB=utf8_decode ( $listeB  ) ;
    //***** on insert les données
    $sql1 ="INSERT INTO...... (blablablabla $listeA,$listeB )
    Il faut que je test mes autre champs ... en attendant je met ce post en résolu tout en te disant un GRAND pour ton coups de main !!

  15. #15
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    la par contre je sèche, j'ai essayé pas mal de truc


    j'ai un champs text ou je rentre un "string" qui servira de nom de dossier....
    Lorsque je met des accents j'ai des "?" a la place ... j'ai essayer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    	if (isset($_POST['new_rep']) )
    		{$new_rep=$_POST['new_rep'];
    $new_rep=utf8_decode ( $new_rep  ); //on decode l'utf-8 }
    	else $new_rep="";

    et

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    if(empty($listeB) AND !empty($new_rep))
                // le chemin par defaut est ../dossier/nouveau dossier/ 
    			$new_rep=utf8_decode ( $new_rep  ); //on decode l'utf-8 pour le remettre en ISO-8859-1 -- affichage sous linux
    		{	$content_dir= '../dossier'/'.$new_rep.'/';
    			$dossier=$new_rep;                               //on stock la valeur de la liste déroulante B dans une variable
    			// si le chemin existe déja --> message d'erreur
    			if(is_dir($content_dir)) 
    			{	echo "<script>alert('Dossier déjà existant');</script>"; 
    				//return true;
    			}
    			else
    			// sinon creer dossier
    			{	if(mkdir($content_dir)) 
    				{  .....
    mais j'ai toujours des " t??r?ion ??s " bizzareries dans ma bdd et les nom de dossiers crées correspondent aussi a " t??r?ion ??s " ??

    comment forcer les accents stp??

    j'ai modifier un nom de dossier en mettant un accent, et fillezilla m'a tout affiché mes accents en caractère speciaux automatiquement c'est reparti !! comment parametrer l'affichage sous FZ ??

  16. #16
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    C'est l'inverse : quand tu crées un repertoire, il faut lui donner un nom en UTF8.
    donc utf8_encode.

  17. #17
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    --> tu sait quoi je ne comprends plus rien .... pourtant j'essay d'en savoir plus !!
    J'ai renommé un dossier sous filezilla, j'ai remplacer un "?" par un "é" ... tout mes accents se sont remis avec un affichage bizzard "Réglementaire"
    Comme si Filezilla avait basculé de l'utf-16 à l'utf-8

    je me dit pas grave, je fait un tour sur ma console ( putty acces distant)
    pareil, des caractères speciaux : je doit faire des "cd Réglementaire" pour entrer dans le dossier ...
    Le serveur (ubuntu) est en utf8 ??

    ok je continu, regarde cette ligne de code et dit moi ce qui ne vas pas :

    root@serveur:/var/www/toto/lulu# cd ??????????????
    root@serveur:/var/www/toto/lulu/éééééééééééààè#

    On dirait que mon serveur est bien en utf-16 (avec accents) mon client le consulte en mode utf8 (ne reconnais pas les accents m'affiche des ????) traduit ma requete en utf-16(avec accents)

    Qu'en pense tu ??
    je me suis un peu documenté :ici:

    il faudrais RE-basculer filezila en utf-16 pour que je puisse voir les accents (je n'arrive pas )

  18. #18
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    bon ..... je commence a saturé, j'ai supprimer tout mes sous dossier...tout remis a plat !!

    DIAGNOSTIQUE et PREISIONS:

    - Les dossiers parents qui s'affichaient "Réglementaire" se réaffichent "Réglementaire" sous filezilla

    - Sous putty en terminal distant, le dossier porte le nom de "Réglementaire"

    - je crée un dossier dans cd dossier parent, les accents sont remplacer par des "?r?r?iel t?n?"

    - dans ma base de donnée les champs en utf8_unicode_ci affichent des noms de ce genre "?r?r?iel t?n?"


    Que dois je faire ??
    Linux gère les dossiers avec accents ??
    Merci

  19. #19
    Membre habitué
    Inscrit en
    Mai 2007
    Messages
    270
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 270
    Points : 138
    Points
    138
    Par défaut
    Salut,
    Sabotage à l'aide !!

    depuis mon site je crée des dossier avec la fonction mkdir. pour un dossier intitulé "été" voici ce qu il se passe :
    sur mon site lors de la création "été" --> dans ma base de données "?t?" --> dans mon site lors de la lecture"?t?" --> sous fillezila"?t?"


    :s d'ou sa peux venir stp, si quelqu'un d'autre a une idée !!

Discussions similaires

  1. [CSV] Supprimer les caractères qui gênent
    Par sami_c dans le forum Langage
    Réponses: 5
    Dernier message: 08/09/2006, 08h41
  2. les caractères qui posent problème ..
    Par questionneuse dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 18/07/2006, 14h26
  3. domxml caractère qui passe pas
    Par gabychon dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 19/05/2006, 14h08
  4. Afficher un caractère qui clignote à l'écran
    Par ha125 dans le forum Assembleur
    Réponses: 2
    Dernier message: 27/04/2006, 18h45
  5. [VB.NET] une chaine de caractère qui devient une propriete
    Par lucie.houel dans le forum ASP.NET
    Réponses: 8
    Dernier message: 20/09/2005, 14h10

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