Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1382 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Besoin d'aide pour une mauvaise ponctuation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Besoin d'aide pour une mauvaise ponctuation

n°1741543
alx067
Posté le 04-06-2008 à 21:02:27  profilanswer
 

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
mood
Publicité
Posté le 04-06-2008 à 21:02:27  profilanswer
 

n°1741551
leflos5
On est ou on est pas :)
Posté le 04-06-2008 à 21:24:28  profilanswer
 

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.

n°1741552
alx067
Posté le 04-06-2008 à 21:29:02  profilanswer
 

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
n°1741719
NewsletTux
<Insérez ici votre vie />
Posté le 05-06-2008 à 10:18:38  profilanswer
 

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
n°1741734
soju
One shot !
Posté le 05-06-2008 à 10:25:39  profilanswer
 

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

n°1741770
leflos5
On est ou on est pas :)
Posté le 05-06-2008 à 11:07:25  profilanswer
 

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. }

n°1742266
alx067
Posté le 05-06-2008 à 22:29:24  profilanswer
 

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
n°1742292
theredled
● REC
Posté le 06-06-2008 à 00:10:19  profilanswer
 

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
n°1742517
alx067
Posté le 06-06-2008 à 14:11:44  profilanswer
 

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
n°1742536
theredled
● REC
Posté le 06-06-2008 à 14:45:19  profilanswer
 

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
mood
Publicité
Posté le 06-06-2008 à 14:45:19  profilanswer
 

n°1742781
alx067
Posté le 06-06-2008 à 23:32:08  profilanswer
 

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
n°1742797
theredled
● REC
Posté le 07-06-2008 à 01:08:46  profilanswer
 

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
n°1742806
alx067
Posté le 07-06-2008 à 03:42:11  profilanswer
 

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
n°1742807
alx067
Posté le 07-06-2008 à 04:06:29  profilanswer
 

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
n°1742831
l0g4n
Expert en tout :o
Posté le 07-06-2008 à 11:20:58  profilanswer
 

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....

n°1742844
theredled
● REC
Posté le 07-06-2008 à 12:35:23  profilanswer
 

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
n°1743285
alx067
Posté le 09-06-2008 à 01:00:26  profilanswer
 

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
n°1743286
theredled
● REC
Posté le 09-06-2008 à 01:20:44  profilanswer
 

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

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Besoin d'aide pour une mauvaise ponctuation

 

Sujets relatifs
[résolu] viewer.php?id=.... pour upload d'images besoin d'aidestrtok à partir d'un fichier.txt j'ai besoin d'aide svp
Aide pour une macro[ C ] Besoin d'aide pour afficher l'heure en temps réel
[Fini]Aide formulaire qui ne fonctionne pas :/besoin d'aide programmation
Plus de sujets relatifs à : Besoin d'aide pour une mauvaise ponctuation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR