Besoin d'aide pour une mauvaise ponctuation

Besoin d'aide pour une mauvaise ponctuation - PHP - Programmation

Marsh Posté le 04-06-2008 à 21:02:27    

Bonjour, voici mon problème, j'ai une page .php dans laquelle se trouve un formulaire qui me permet de définir des variables et de créer un fichier .txt.
Une des variables et le titre à donner au fichier .txt.
Pour éviter des problèmes de caractères spéciaux, j'utilise la fonction ereg_replace pour remplacer les caractères spéciaux par des caractères simples.
Exemple :

Citation :

...
$TitreSansAccent = ereg_replace("é","e", $TitreSansAccent);
$TitreSansAccent = ereg_replace("è","e", $TitreSansAccent);
...


Cela marche pour tous les caractères, sauf pour l'apostrophe :

Citation :

'


qui est remplacé par un antislash et une apostrophe

Citation :

\'


 
Le fichier .txt créer se nomme donc quelqu\'un.txt à la place de quelqu'un.txt
 
Il devrait y avoir une solution pour éviter l'affichage de l'antislash

Citation :

\


ou replacer l'apostrophe

Citation :

'

par un espace


Message édité par alx067 le 04-06-2008 à 21:05:10
Reply

Marsh Posté le 04-06-2008 à 21:02:27   

Reply

Marsh Posté le 04-06-2008 à 21:24:28    

Je pense que c'est une mauvaise idée de stocker un nom de fichier avec des caractères exotiques simplement parce que y'a pas que windows sur terre.
 
Remplace plutôt tout par _ et stocke le nom original quelque part, c'est mon avis sur la question.

Reply

Marsh Posté le 04-06-2008 à 21:29:02    

C'est ce que j'avais prévu au départ mais quand je fais la fonction

Citation :

$TitreSansAccent = ereg_replace("'","_", $TitreSansAccent);


cela replace le  

Citation :

'


par  

Citation :

\_


je récupère toujours ce satané antislash...
 
 :pfff:
 
Je voudrais que cette fonction soit automatique...


Message édité par alx067 le 04-06-2008 à 21:31:40
Reply

Marsh Posté le 05-06-2008 à 10:18:38    

et pourquoi ne les interdis-tu pas directement ?
une expression rationnelle du style eregi avec des patterns comme [az-AZ], et/ou bien [0-9] pour vérifier que ton nom de fichier n'ait rien d'autre que ça ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 05-06-2008 à 10:25:39    

l'antislash doit venir des magic_quotes
et +1 avec NewsletTux, mais avec PCRE

Reply

Marsh Posté le 05-06-2008 à 11:07:25    

Moi j'utilise ça

Code :
  1. function filtre( $valeur ) {
  2. $car_speciaux = " '`ÀÁÂÃÄÅÆàáâãäåæÈÉÊËèéêëÌÍÎÏìíîïÒÓÔÕÖØòóôõöøÙÚÛÜùúûüßÇçÐðÑñÞþÝ";
  3.         $car_normaux  = '___AAAAAAAaaaaaaaEEEEeeeeIIIIiiiiOOOOOOooooooUUUUuuuuBCcDdNnPpY';
  4.         $valeur = strtr($valeur, $car_speciaux,$car_normaux);
  5. return $valeur;
  6. }

Reply

Marsh Posté le 05-06-2008 à 22:29:24    

Bonsoir,  
 
1. j'ai utilisé les lignes de leflos5 et réalisé ceci :
 
function filtre( $TitreSansAccent ) {
$car_speciaux = " '`ÀÁÂÃÄÅÆàáâãäåæÈÉÊËèéêëÌÍÎÏìíîïÒÓÔÕÖØòóôõöøÙÚÛÜùúûüßÇçÐðÑñÞþÝ";
        $car_normaux  = '___AAAAAAAaaaaaaaEEEEeeeeIIIIiiiiOOOOOOooooooUUUUuuuuBCcDdNnPpY';
        $TitreSansAccent = strtr($TitreSansAccent, $car_speciaux,$car_normaux);
return $TitreSansAccent;
}

 
Cela n'a aucun effet, je suppose avoir mal fait. Je cherche à faire une page qui me demande des infos dont le titre du document à créer, ce titre servira à donner le nom au fichier .txt et sera noté dans le fichier .txt avec les caractères d'origines convertis pour HTML.
 
 
2. Je m'été inspiré d'un code et j'ai crée ceci (qui marche sauf pour les apostrophe !!) :
 
//On enlève les caractères spéciaux du titre
$TitreSansAccent = $Titre;
$string = $TitreSansAccent;
$TitreSansAccent = ereg_replace("é","e", $TitreSansAccent);
$TitreSansAccent = ereg_replace("è","e", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ê","e", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ë","e", $TitreSansAccent);
$TitreSansAccent = ereg_replace("à","a", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ä","a", $TitreSansAccent);
$TitreSansAccent = ereg_replace("â","a", $TitreSansAccent);
$TitreSansAccent = ereg_replace("û","u", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ù","u", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ü","u", $TitreSansAccent);
$TitreSansAccent = ereg_replace("î","i", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ï","i", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ô","o", $TitreSansAccent);
$TitreSansAccent = ereg_replace("ö","o", $TitreSansAccent);
$TitreSansAccent = ereg_replace("&","et", $TitreSansAccent);
$TitreSansAccent = ereg_replace("/","-", $TitreSansAccent);
$TitreSansAccent = ereg_replace(",","-", $TitreSansAccent);
$TitreSansAccent = ereg_replace(":","-", $TitreSansAccent);
 
//On convertit les caracteres html
$Titre = stripslashes(nl2br(htmlentities($_POST['Titre'])));
 
//Ouverture du fichier
$fp = fopen("Infos/ajout.txt",a);
 
//On rajoute les infos
fputs($fp, "Titre;$Titre"."\r\n" );
 
//Renommer le fichier
rename("Infos/ajout.txt","Infos/$TitreSansAccent.txt" );

 
3. Les magic_quotes, qu'es que c'est ?
 :??:


Message édité par alx067 le 05-06-2008 à 22:34:37
Reply

Marsh Posté le 06-06-2008 à 00:10:19    

Une option infâme de php qui ajoute des antislashes devant toutes les apostrophes présentes en POST et en GET.

 

Comme je suppose que tu sais échapper un requête SQL et que tu sais ce qu'est une injection SQL (n'est-ce pas ? :o :o :o), tu peux désactiver cette option pourrie dans PHP.INI (magic_quotes_gpc = Off)


Message édité par theredled le 06-06-2008 à 00:10:42

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 06-06-2008 à 14:11:44    

Je vais tenter de le faire en activant la base MySQL chez Free.
 
Y a t'il moyen de le faire ? Je pense à une ligne de commande qui modifie PHP.INI ?

Message cité 1 fois
Message édité par alx067 le 06-06-2008 à 14:12:29
Reply

Marsh Posté le 06-06-2008 à 14:45:19    

alx067 a écrit :

Je vais tenter de le faire en activant la base MySQL chez Free.


Je comprend pas ce que tu veux dire là :D

alx067 a écrit :

Y a t'il moyen de le faire ? Je pense à une ligne de commande qui modifie PHP.INI ?


Si tu es sur Free et que les magic_quotes sont activés, tu ne pourras pas les désactiver en tant que tel.

 

Faudrait plutot faire des fonctions dans le genre :

 
Code :
  1. function stripslashes_deep($value)
  2. {
  3.    $value = is_array($value) ?
  4.                array_map('stripslashes_deep', $value) :
  5.                stripslashes($value);
  6.  
  7.    return $value;
  8. }
  9.  
  10. function remove_magic_quotes()
  11. {
  12.    $_POST = stripslashes_deep($_POST);
  13.    $_GET = stripslashes_deep($_GET);
  14.    $_COOKIE = stripslashes_deep($_COOKIE);
  15.  }
  16. }


(à tester)

 

et appeler remove_magic_quotes() à chaque début de script...

 

En gros, les magic_quotes seront activés, mais tu vireras les éventuels slashes "à la main" grâce à ces fonctions.

Message cité 1 fois
Message édité par theredled le 06-06-2008 à 14:45:50

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 06-06-2008 à 14:45:19   

Reply

Marsh Posté le 06-06-2008 à 23:32:08    

J'ai essayé cette fonction (sans rien y comprendre je l'avoue :sweat: ):
 

Citation :

function stripslashes_deep($TitreSansAccent)
{
    $value = is_array($TitreSansAccent) ?
                 array_map('stripslashes_deep', $TitreSansAccent) :
                    stripslashes($TitreSansAccent);
 
     return $TitreSansAccent;
}
 
function remove_magic_quotes()
{
   if (get_magic_quotes_gpc()) {
    $_POST = stripslashes_deep($_POST);
    $_GET = stripslashes_deep($_GET);
    $_COOKIE = stripslashes_deep($_COOKIE);
  }
}


 
Les Antislashes sont toujours ajoutés avant les apostrophes...
 
Et celle-ci en cherchant un peu sur le net...
 

Citation :

$TitreSansAccent = addslashes($_POST["TitreSansAccent"]);


 
Le Titre n'est carrément plus affiché...
 
Je suis newbie et là je galère...
HELP!!!  :bounce:

Message cité 1 fois
Message édité par alx067 le 06-06-2008 à 23:39:29
Reply

Marsh Posté le 07-06-2008 à 01:08:46    

alx067 a écrit :

J'ai essayé cette fonction (sans rien y comprendre je l'avoue :sweat: ):
 

Citation :

function stripslashes_deep($TitreSansAccent)
{
    $value = is_array($TitreSansAccent) ?
                 array_map('stripslashes_deep', $TitreSansAccent) :
                    stripslashes($TitreSansAccent);
 
     return $TitreSansAccent;
}
 
function remove_magic_quotes()
{
   if (get_magic_quotes_gpc()) {
    $_POST = stripslashes_deep($_POST);
    $_GET = stripslashes_deep($_GET);
    $_COOKIE = stripslashes_deep($_COOKIE);
  }
}



 
Euh, dans ton script tu as bien appelé remove_magic_quotes() ?
Parce que des fonctions comme ça ça sert à rien, il faut les appeler.


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 07-06-2008 à 03:42:11    

Je ne comprends pas...
 
J'ai pris ce morceau de code... un peu au hasard
j'ai tenté

Citation :

$TitreSansAccent = ereg_replace("\'" ", $TitreSansAccent);


 
qui ne remplace que l'apostrophe, mais le \ est toujours là.
 
 :cry:  :cry:  :cry:  :cry:  :cry:  :cry:


Message édité par alx067 le 07-06-2008 à 03:44:06
Reply

Marsh Posté le 07-06-2008 à 04:06:29    

J'ai trouvé :
 

Citation :

// enlever les accents
$TitreSansAccent = strtr($TitreSansAccent,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 
// remplacer les caracteres autres que lettres, chiffres et point par _
$TitreSansAccent = preg_replace('/([^.a-z0-9]+)/i', '_', $TitreSansAccent);


 
Ce n'est pas exactement ce que je recherché, mais çà me conviendra...
 
Merci à vous et http://www.phpfrance.com/tutoriaux [...] e-fichiers
 
Je laisse le post ouvert pour ceux qui aurait la réponse pour désactiver les Magic_quotes chez Free.
Il parait que les magic_quotes ne poseront polus problème dans la version 6 de PHP...

Message cité 1 fois
Message édité par alx067 le 07-06-2008 à 04:09:16
Reply

Marsh Posté le 07-06-2008 à 11:20:58    

Oula, ton niveau de php me fait penser que tu aura du mal avec ton code....
Bonne chance, c'est en forgeant que l'on devient forgeron....

Reply

Marsh Posté le 07-06-2008 à 12:35:23    

alx067 a écrit :

J'ai trouvé :
 

Citation :

// enlever les accents
$TitreSansAccent = strtr($TitreSansAccent,
'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ',
'AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
 
// remplacer les caracteres autres que lettres, chiffres et point par _
$TitreSansAccent = preg_replace('/([^.a-z0-9]+)/i', '_', $TitreSansAccent);


 
Ce n'est pas exactement ce que je recherché, mais çà me conviendra...
 
Merci à vous et http://www.phpfrance.com/tutoriaux [...] e-fichiers
 
Je laisse le post ouvert pour ceux qui aurait la réponse pour désactiver les Magic_quotes chez Free.
Il parait que les magic_quotes ne poseront polus problème dans la version 6 de PHP...


:/
 
Tu veux vraiment pas essayer ma solution (ou me demander de t'expliquer si tu comprend pas ce que je dis) au lieu d'essayer n'importe quoi ?


---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Marsh Posté le 09-06-2008 à 01:00:26    

Je veux bien essayer ta solution mais je n'ai compris.
 
J'ai tenté ceci sans effet :  
 

Citation :

function stripslashes_deep($TitreSansAccent)  
{  
    $value = is_array($TitreSansAccent) ?  
                 array_map('stripslashes_deep', $TitreSansAccent) :  
                    stripslashes($TitreSansAccent);  
 
     return $TitreSansAccent;  
}  
 
function remove_magic_quotes()  
{  
   if (get_magic_quotes_gpc()) {  
    $_POST = stripslashes_deep($_POST);  
    $_GET = stripslashes_deep($_GET);  
    $_COOKIE = stripslashes_deep($_COOKIE);  
  }  
}


 
Peut-être pourrais-tu ecrire le code pour moi ?
Je suis chez Free, la valeur est $TitreSansAccent.

Message cité 1 fois
Message édité par alx067 le 09-06-2008 à 01:01:25
Reply

Marsh Posté le 09-06-2008 à 01:20:44    

alx067 a écrit :

Je veux bien essayer ta solution mais je n'ai compris.

 

J'ai tenté ceci sans effet :

 
Citation :

function stripslashes_deep($TitreSansAccent)
{
    $value = is_array($TitreSansAccent) ?
                 array_map('stripslashes_deep', $TitreSansAccent) :
                    stripslashes($TitreSansAccent);
 
     return $TitreSansAccent;
}
 
function remove_magic_quotes()
{
   if (get_magic_quotes_gpc()) {
    $_POST = stripslashes_deep($_POST);
    $_GET = stripslashes_deep($_GET);
    $_COOKIE = stripslashes_deep($_COOKIE);
  }
}

 

Peut-être pourrais-tu ecrire le code pour moi ?


Avec plaisir :

theredled a écrit :

Code :
  1. function stripslashes_deep($value)
  2. {
  3.    $value = is_array($value) ?
  4.                array_map('stripslashes_deep', $value) :
  5.                stripslashes($value);
  6.  
  7.    return $value;
  8. }
  9.  
  10. function remove_magic_quotes()
  11. {
  12.    $_POST = stripslashes_deep($_POST);
  13.    $_GET = stripslashes_deep($_GET);
  14.    $_COOKIE = stripslashes_deep($_COOKIE);
  15.  }
  16. }
  17.  
  18. remove_magic_quotes();



Tu laisses ça tel quel, et tu copies ce code au début de ton script.

 

Quand ça marchera, je t'expliquerais.

 
alx067 a écrit :

Je suis chez Free, la valeur est $TitreSansAccent.


je ne comprend pas cette phrase :??:


Message édité par theredled le 09-06-2008 à 01:22:48

---------------
Contes de fées en yaourt --- --- zed, souviens-toi de ma dernière lettre. --- Rate ta musique
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed