Besoin d'aide pour une mauvaise ponctuation - PHP - Programmation
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.
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...
Je voudrais que cette fonction soit automatique...
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 ...
Marsh Posté le 05-06-2008 à 10:25:39
l'antislash doit venir des magic_quotes
et +1 avec NewsletTux, mais avec PCRE
Marsh Posté le 05-06-2008 à 11:07:25
Moi j'utilise ça
Code :
|
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 ?
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 ? ), tu peux désactiver cette option pourrie dans PHP.INI (magic_quotes_gpc = Off)
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 ?
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à
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 :
|
(à 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.
Marsh Posté le 06-06-2008 à 23:32:08
J'ai essayé cette fonction (sans rien y comprendre je l'avoue ):
Citation : function stripslashes_deep($TitreSansAccent) |
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!!!
Marsh Posté le 07-06-2008 à 01:08:46
alx067 a écrit : J'ai essayé cette fonction (sans rien y comprendre je l'avoue ):
|
Euh, dans ton script tu as bien appelé remove_magic_quotes() ?
Parce que des fonctions comme ça ça sert à rien, il faut les appeler.
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à.
Marsh Posté le 07-06-2008 à 04:06:29
J'ai trouvé :
Citation : // enlever les accents |
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...
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....
Marsh Posté le 07-06-2008 à 12:35:23
alx067 a écrit : J'ai trouvé :
|
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 ?
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) |
Peut-être pourrais-tu ecrire le code pour moi ?
Je suis chez Free, la valeur est $TitreSansAccent.
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 :
Peut-être pourrais-tu ecrire le code pour moi ? |
Avec plaisir :
theredled a écrit :
|
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
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 :
...
$TitreSansAccent = ereg_replace("é","e", $TitreSansAccent);
$TitreSansAccent = ereg_replace("è","e", $TitreSansAccent);
...
Cela marche pour tous les caractères, sauf pour l'apostrophe :
'
qui est remplacé par un antislash et une apostrophe
\'
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
\
ou replacer l'apostrophe
'
par un espace
Message édité par alx067 le 04-06-2008 à 21:05:10