Pourquoi sa coince ? Haa sa m'en bouche un coin !

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Pourquoi sa coince ? Haa sa m'en bouche un coin !

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 11 janv. 2010, 01:29

:mrgreen: c'est un peu facile..., mais bon c'est ton droit
Encore une fois on s'en fou totalement d'avoir une liste non exhaustive puisqu'il s'agit simplement d'avoir un nom de fichier image valide et qu'un preg fera le reste du ménage à la suite.

As-tu de réels problèmes de compréhension ou est-ce le fait de t'être planté dans la compatibilité de str_replace avec l'utf-8 qui t'a fait devenir revanchard au point de pourrir ce topic avec des interventions suivantes sans intérêt pour le sujet traité et pour le moins loufoques du genre "faudrait deja savoir l'intérêt de supprimer les accents, parce que moi j'en vois aucun" etc.

Je pencherais plutôt pour la deuxième hypothèse puisque tes interventions sont bien plus pertinentes dans les autres sujets, à se demander si c'est la même personne :)

Keep cool, l'erreur est humaine, et comme on dit il n'y a que ceux qui ne font rien qui ne se trompent jamais 8-)

Aller juste entre nous, t'aurais pas un caractère un peu "cabochard" ? :wink:

Ou alors si ce n'est pas ça, montres nous plutôt où est le danger dans ce cas précis, de faire un remplacement de caractères avec un srt_replace() suivi d'un preg; on aura au moins appris quelque chose.

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 10 janv. 2010, 19:53

Et même si tu ne couvre pas toutes les possibilités
c'est bien de le reconnaitre enfin, je suis curieux de voir ta liste de caractère a remplacer. :D
Je te laisse réfléchir; iconv n'est pas une fonction "magique" :wink:
:mrgreen: c'est un peu facile..., mais bon c'est ton droit

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 10 janv. 2010, 06:57

Et même si tu ne couvre pas toutes les possibilités
c'est bien de le reconnaitre enfin, je suis curieux de voir ta liste de caractère a remplacer. :D
Je te laisse réfléchir; iconv n'est pas une fonction "magique" :wink:

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 10 janv. 2010, 00:36

Et même si tu ne couvre pas toutes les possibilités
c'est bien de le reconnaitre enfin, je suis curieux de voir ta liste de caractère a remplacer. :D

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 09 janv. 2010, 22:29

justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace
J'ai lu nul part que thekingkong destinait son site à un public japonais...

Et donc concrètement selon ton système - lequel ? - il se passe quoi si un visiteur tente de télécharger un fichier image avec un nom qui comporte des caractères accentués, des espaces ou des caractères spéciaux ?
le caratere japonnais etant un exmple, et n'importe qui peu faire un caractère japonnais 映画、音楽,

par dessus tout ca, c'est soit un coup de url_encode, soit une conversion ascii moins les carateres non autoriser dans le nom d'un fichier (et les caratere qu'on veux en moins genre l'espace, un slash....)

en resumer url_encode ou iconv + preg
Ah on avance un peu puisque quelques post plus haut tu ne voyais pas de raison de remplacer les caractères accentués dans un fichier image.

1/ N'importe qui peut faire un caractère japonais, mais il est très peu probable que n'importe quel visiteur français ait un fichier image comportant un caractère japonais.

2/ On oublie url_encode dans ce cas particulier car on veut un fichier image lisible et accessible.

3/ Reste donc ta proposition d'utiliser iconv. Et proposer à un débutant d'utiliser iconv pour convertir les caractères accentués est pour le moins inadapté car c'est une usine à problème :

- D'une part pour faire des tests en local cela risque fort de retourner des résultats erronés.

- D'autre part, même sur le serveur distant cela risque de ne pas fonctionner correctement cf ce post. Donc il est conseiller d'utiliser préalablement setlocale, et setlocale fonctionnera plus ou moins bien suivant la configuration du serveur #-o

Niveau portabilité d'un script, on a déjà vu beaucoup mieux :roll:

Et puis l'avantage d'utiliser un srt_replace est que tu peux faire d'autres remplacements par la même occasion. Et même si tu ne couvre pas toutes les possibilités, tu auras fait l'essentiel et le preg qui suivra fera le reste du ménage. Ce qui reviendra presque au même que iconv mais avec des possibilités en plus et surtout sans avoir à se soucier de la configuration du serveur (chose essentielle pour la portabilité ou quand on donne des conseils sans savoir si la personne a la main sur le serveur ou non :wink: )


@thekingkong

Ah oui ton script est vieux effectivement car cela fait déjà longtemps qu'on utilise plus la syntaxe $HTTP_... (déprécié)
Donc déjà avec ton éditeur favori tu peux remplacer

$HTTP_GET_VARS par $_GET
$HTTP_SESSION_VARS par $_SESSION
$HTTP_POST_VARS par $_POST


Ensuite j'ai un doute sur le bien fondé d'utiliser utf-8 dans la bdd.

Je ne connais pas tous les éléments, mais si tu dois à un moment donné faire un include d'un fichier iso dans ton fichier utf-8, ou faire afficher des éléments de ta bdd codée en utf-8 dans un fichier iso, tu auras des problèmes.

Généralement quand on code en utf-8 on le fait dès le début sinon c'est risqué ou alors ça demande pas mal de travail pour convertir l'ensemble des scripts et finalement ce n'est généralement indispensable que si tu destine ton site à un public étranger avec des langues non latines.

Donc mon opinion est : codé en utf-8 est une bonne habitude pour les nouveaux scripts. Par contre pour les anciens (ou ceux inclus dans d'anciens scripts), la mise à jour ne doit se faire que si nécessaire.

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par thekingkong » 09 janv. 2010, 21:29

Bonjour, salut à tous desolé pour mon absence j'était cloué au lit.
Je suis desoler de vous avoir laisse avec un petit bout de code seulement. pardonner moi l'equipe :oops: .

Voila le code pour ce qu'il veulent m'aider.


modif_ann.php

Code : Tout sélectionner

<?php session_start(); if (!session_is_registered(id_user)) { header("location:index.php"); } include ("config_ann.php"); include ("$include/header.inc"); echo "$del_sup_chapo<br>"; if (!isset($HTTP_GET_VARS[min])) $min=0; $id_user=$HTTP_SESSION_VARS[id_user]; //on compte le nombre d'annonces passées par l'utilisateur $query="select count(*) from $table_annonces where id_user='$id_user'"; $succes=mysql_query($query); $count=mysql_fetch_array($succes); $count=$count[0]; // les petites bornes pour le chiffrage des annonces dans le titre $inf=$min+1; if (($min+$max)>=$count) { $sup=$count; } else { $sup=$min+$max; } // soyons courtois et informatifs echo "<span class='texte_maigre'>Vous avez </span>"; echo "<span class='lienblanc'>$count</span>"; echo "<span class='texte_maigre'> annonce(s) en ligne - "; echo "annonce(s) </span>"; echo "<span class='lienblanc'>$inf</span>"; echo "<span class='texte_maigre'> &agrave; </span>"; echo "<span class='lienblanc'>$sup</span>\n"; // date du jour en timestamp $date=time(); // on extrait les annonces en question $query = "select * from $table_annonces where id_user='$id_user' order by id desc limit $min,$max"; $result = mysql_query($query); while ($i=mysql_fetch_array($result)) { $id=$i[id]; $tel=$i[tel]; $tel_2=$i[tel_2]; $text=stripslashes($i[text]); $id_cat_sel=$i[id_cat]; //récup de la catégorie; l'erreur est humaine ! $img=$i[img]; // on affiche tout ça dans un formulaire echo "<form method='POST' action='ann_del_modif.php?'.SID name='modif' enctype='multipart/form-data'>\n"; echo "<table width='550' cellspacing='0' cellpadding='2' border='0' bgcolor='$color_bordure'>\n"; echo "<tr><td>\n"; echo "<table width='100%' cellspacing='0' cellpadding='2' border='0'>\n"; echo "<tr bgcolor='$color'><td align='right'>\n"; echo "<input type='hidden' name='id' value='".$id."'>\n"; echo "<input type='hidden' name='date' value='".$date."'>\n"; echo "<span class='texte_gras'>tel</span>\n"; echo "</td><td>\n"; echo "<input type='text' name='tel' size='20' value='".$tel."'>\n"; echo "</td></tr>\n"; echo "<tr bgcolor='$color_alt'><td align='right'>\n"; echo "<span class='texte_gras'>tel 2</span>\n"; echo "</td><td>"; echo "<input type='text' name='tel_2' size='20' value='".$tel_2."'>\n"; echo "</td></tr>\n"; echo "<tr bgcolor='$color'><td align='right'>\n"; echo "<span class='texte_gras'>catégorie</span>\n"; echo "</td><td>\n"; echo "<select name='id_cat'>\n"; $query_list="select * from $table_cat order by id_cat"; $list=mysql_query($query_list); while($e=mysql_fetch_array($list)) { $categorie=$e[categorie]; $id_cat=$e[id_cat]; echo "<option value='"; echo $id_cat."'"; if ($id_cat==$id_cat_sel) echo "selected"; echo ">"; echo $categorie; echo "</option>\n"; } echo "</select>\n"; echo "</td></tr>\n"; echo "<tr bgcolor='$color_alt'><td align='right' valign='top'>\n"; echo "<span class='texte_gras'>annonce</span>\n"; echo "</td><td>\n"; echo "<textarea name='text' rows='5' cols='30' wrap='VIRTUAL'>".$text."</textarea>\n"; echo "</td></tr>\n"; if ($img!="") { echo "<tr bgcolor='$color'><td>&nbsp</td><td>"; echo "<input type='hidden' name='img' value='img/$img'>\n"; echo "<img src='img/".$img."'>"; echo "</td></tr><tr bgcolor='$color'><td class='texte_gras'align='right'>image</td>"; echo "<td>"; echo "<input type='file' name='file'>"; echo "</td></tr>"; } else { echo "<tr bgcolor='$color'><td span class='texte_gras' align='right'>\n"; echo "image\n"; echo "</td><td class='texte_maigre'>\n"; echo "<input type='file' name='file'>"; echo "</td></tr>"; } echo "<tr bgcolor='$color_alt'><td>\n"; echo "&nbsp;\n"; echo "</td><td class='texte_maigre'>\n"; echo "<input type='submit' name='action' value='modifier'>\n"; echo "&nbsp;:::&nbsp;"; echo "<input type='submit' name='action' value='supprimer'>\n"; echo "</td></tr>\n"; echo "</table>\n"; echo "</td></tr>\n"; echo "</table><br>\n"; echo "</form>"; } // un poil de navigation si nécessaire if ($min>0) { echo "<A "; echo "HREF='modif_ann.php?min=".($min-$max)."&".SID."'"; echo " class='lienblanc'>Page précedente</A>&nbsp; &nbsp; \n"; } // lien vers la page suivante si nécessaire if (($min+$max)<$count) { echo "<A "; echo "HREF='modif_ann.php?min=".($min+$max)."&".SID."'"; echo " class='lienblanc'>Page suivante</A>\n"; } echo "<br><a href='users_choice.php?'.SID class='lienblanc'>retour au choix utilisateurs</a>"; include ("$include/footer.inc"); ?>
Ann_form.php

Code : Tout sélectionner

session_start(); include ("$include/header.inc"); if ($HTTP_SESSION_VARS[id_user]!="") //récup données utilisateur si logué { $query="select * from $table_user where id_user='$HTTP_SESSION_VARS[id_user]'"; $res=mysql_query($query); $var=mysql_fetch_object ($res); $nom=$var->nom; $prenom=$var->prenom; $mail=$var->mail; } $date=time(); if ($HTTP_SESSION_VARS[id_user]!="") { $envoi_page="users_choice.php?".SID; } else { $envoi_page="index.php?".SID; } ?> <script language="JavaScript" src="js/verif_form.js"> </script> <?php echo $mess_requis; ?> <form action="<?php echo $envoi_page; ?>" method="post" enctype="multipart/form-data" name="annonce"> <table width="600" border="0" cellspacing="0" cellpadding="2" bgcolor="<?php echo $color_bordure; ?>" align="center"> <tr> <td> <table width="100%" border="0" cellspacing="0" cellpadding="4" bgcolor="<?php echo $color; ?>" align="center"> <tr> <td width="30%" align="right" class="texte_gras"> <input type="hidden" name="id_user" value="<?php echo $id_user; ?>"> <input type="hidden" name="date" value="<?php echo $date; ?>"> nom ou pseudo <span class="texte_gras_rouge">&reg;</span></td> <td valign="top"> <input type="text" name="nom" size="25" maxlength="25" value="<?php echo $nom; ?>"> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td width="30%" align="right" class="texte_gras">pr&eacute;nom </td> <td valign="top"> <input type="text" name="prenom" size="25" maxlength="25" value="<?php echo $prenom ?>"> </td> </tr> <tr> <td width="30%" align="right" class="texte_gras">mail <span class="texte_gras_rouge">&reg;</span></td> <td valign="top"> <input type="text" name="mail" size="30" maxlength="30" value="<?php echo $mail; ?>"> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td width="30%" align="right" class="texte_gras">t&eacute;l</td> <td valign="top"> <input type="text" name="tel" size="20" maxlength="20" value="<?php echo $tel; ?>"> </td> </tr> <tr> <td width="30%" align="right" class="texte_gras">t&eacute;l 2</td> <td valign="top"> <input type="text" name="tel_2" size="20" maxlength="20" value="<?php echo $tel_2; ?>"> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td width="30%" align="right" class="texte_gras">cat&eacute;gorie</td> <td valign="top"> <select name="id_cat"> <?php $query="select * from $table_cat order by id_cat"; $result=mysql_query($query); while($i=mysql_fetch_array($result)) { $categorie=$i[categorie]; $id_cat=$i[id_cat]; echo "<option value=\"".$id_cat."\">".$categorie."</option>\n"; } ?> </select> </td> </tr> <tr> <td width="30%" align="right" valign="top" class="texte_gras">texte de l'annonce <span class="texte_gras_rouge">&reg;</span></td> <td valign="top"> <textarea name="text" cols="30" rows="5" wrap="VIRTUAL"><?php echo $text; ?></textarea> </td> </tr> <tr bgcolor="<?php echo $color_alt; ?>"> <td align="right" valign="center" class="texte_gras">image<br><span class="texte_gras_rouge">(jpg ou gif, 50 ko maxi)</span></td> <td valign="center"><input type="file" name="file"></td> </tr> <tr> <td width="30%" align="right">&nbsp;</td> <td class="texte_maigre"> <input type="submit" name="action" value="Envoyer" onClick="MM_validateForm('nom','','R','mail','','RisEmail','text','','R');return document.MM_returnValue"> </td> </tr> </table> </td> </tr> </table> </form> <?php if ($HTTP_SESSION_VARS[id_user]!="") { echo "<a href='users_choice.php?'.SID class='lienblanc'>retour au choix utilisateurs</a><br>"; } else { echo "<br><a href='index.php?' class='lienblanc'>retour &agrave; l'accueil des petites annonces</a><br>"; } include("$include/footer.inc"); ?>
ann_del_modif.php

Code : Tout sélectionner

session_start(); if (!session_is_registered(id_user)) header("location:index.php"); include ("config_ann.php"); $id=$HTTP_POST_VARS[id]; $img_origine=$HTTP_POST_VARS[img]; $doss="img/"; $pref="small_"; // d'abord, détruire, c'est tjrs plus facile !! if ($HTTP_POST_VARS[action]=="supprimer") { if ($img_origine != "") { unlink ($doss.$img_origine); if (file_exists($doss.$pref.$img_origine)) unlink ($doss.$pref.$img_origine); } $query="delete from $table_annonces where id='$id'"; $succes=mysql_query($query); if ($succes) { header("location:users_choice.php?mess=supp&".SID); } } // modifier l'annonce elseif ($HTTP_POST_VARS[action]=="modifier") { // le fichier joint $file_name=virer_accents($file_name); //nettoyage du nom de fichier $file_name=ereg_replace(" ","_",$file_name); $file_name=ereg_replace("'","",$file_name); //$file_name=addslashes($file_name); $img=ereg_replace(" ","_",$file_name); $img=ereg_replace("'","",$file_name); $id_cat=$HTTP_POST_VARS[id_cat]; $tel=trim($HTTP_POST_VARS[tel]); $tel_2=trim($HTTP_POST_VARS[tel_2]); $date=$HTTP_POST_VARS[date]; $text=strip_tags(addslashes(trim($HTTP_POST_VARS[text]))); if ($img == "") { $query="UPDATE $table_annonces"; $query.=" SET id_cat='$id_cat', tel='$tel', tel_2='$tel_2', date='$date', text='$text'"; $query.=" WHERE id='$id'"; $succes=mysql_query($query); if (($succes)) { header ("location:users_choice.php?mess=modif&".SID); } } elseif ($img != "") { if ($img_origine != "") unlink ($doss.$img_origine); if (file_exists($doss.$pref.$img_origine)) unlink ($doss.$pref.$img_origine); // vérification du type et du poids de l'image ou de l'existence d'une image identique if (file_exists($doss.$img)) { header ("location:users_choice.php?mess=memeimg&".SID); } if (($file_type!="image/jpeg") OR ($file_type!="image/pjpeg"))//vérif du type de l'image { header ("location:users_choice.php?mess=type&".SID); } elseif ($file_size>51200)//vérif du poids de l'image { header ("location:users_choice.php?mess=poids&".SID); } else { $file_name=virer_accents($file_name); //nettoyage du nom de fichier $query="UPDATE $table_annonces"; $query.=" SET id_cat='$id_cat', tel='$tel', tel_2='$tel_2', date='$date', text='$text', img='$img'"; $query.=" WHERE id='$id'"; $succes=mysql_query($query); } if (copy($file, "$dest/$file_name") and ($succes)) { header ("location:users_choice.php?mess=modif&".SID); } } } ?>
merci a tous :lol:

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 09 janv. 2010, 14:59

justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace
J'ai lu nul part que thekingkong destinait son site à un public japonais...

Et donc concrètement selon ton système - lequel ? - il se passe quoi si un visiteur tente de télécharger un fichier image avec un nom qui comporte des caractères accentués, des espaces ou des caractères spéciaux ?
le caratere japonnais etant un exmple, et n'importe qui peu faire un caractère japonnais 映画、音楽,

par dessus tout ca, c'est soit un coup de url_encode, soit une conversion ascii moins les carateres non autoriser dans le nom d'un fichier (et les caratere qu'on veux en moins genre l'espace, un slash....)

en resumer url_encode ou iconv + preg

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 09 janv. 2010, 06:29

justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace
J'ai lu nul part que thekingkong destinait son site à un public japonais...

Et donc concrètement selon ton système - lequel ? - il se passe quoi si un visiteur tente de télécharger un fichier image avec un nom qui comporte des caractères accentués, des espaces ou des caractères spéciaux ?

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 09 janv. 2010, 00:21

Il n'y a pas que l'esthétisme qui est en cause, il y a aussi la facilité de lecture pour les visiteurs et l'optimisation pour le référencement, entre autre.
A part ça, essaies de faire afficher simplement une image avec un nom de fichier comportant des espaces et des accents dans un message de ce forum, peut-être tu comprendras mieux.
justement y'a pas que les accents , y'a tout les autre carateres aussi, en gros ca qu'on cherche a faire, c'est du simple et lisible pour tout le monde (a peu pret), et ecrivable (ca se dit pas) par tous aussi
donc le minium requis : l' ASCII
je peu tres bien mettre un caratere japonnais dans un nom de fichier, mais je vais pas m'amuser a tous les mettres dans ton str_replace

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 08 janv. 2010, 21:47

Il n'y a pas que l'esthétisme qui est en cause, il y a aussi la facilité de lecture pour les visiteurs et l'optimisation pour le référencement, entre autre.
A part ça, essaies de faire afficher simplement une image avec un nom de fichier comportant des espaces et des accents dans un message de ce forum, peut-être tu comprendras mieux.

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 08 janv. 2010, 10:53

Quand on autorise un téléchargement de fichier on a tout intérêt de virer les accents, les espaces et autres caractères qui ne permettraient pas d'avoir un chemin de fichier valide accessible par une URL.
ca c'est faux, url_encode est la pour ca, la ce que tu dis c'est par pur esthétisme (mais un esthétisme qui ne marchera pas pour beaucoup de cas)

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 08 janv. 2010, 00:56

Quand on autorise un téléchargement de fichier on a tout intérêt de virer les accents, les espaces et autres caractères qui ne permettraient pas d'avoir un chemin de fichier valide accessible par une URL.

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 08 janv. 2010, 00:33

Cette parenthèse fermée, il serait temps de revenir au topic initial :wink:
ca fait parti du sujet... (la fameuse fonction virer_accents)

faudrait deja savoir l'intérêt de supprimer les accents, parce que moi j'en vois aucun (mais je suis sur que vous grouillez d'exemple). :D

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par AB » 07 janv. 2010, 21:50

C'est du bidouillage de débutant avec une mauvaise approche du sujet.

Quand on travaille en UTF-8, on travaille en utf-8 avec les règles de l'utf-8 et les fonctions adaptées, et l'on essaye pas de faire des remplacements (sauf cas exceptionnel) pour pouvoir utiliser des fonctions qui ne sont pas adaptées.

Et si l'on veut transformer des fichers d'ISO-8859-1 en UTF-8 (puisque c'était la préoccupation initiale de l'auteur du blog que tu as donné en lien) on a aucun intérêt à remplacer un é par son entité html &eacute, puisqu'il faut faire exactement l'inverse cf cet exemple

D'ailleurs cet exemple comme celui précédemment donné comme référence figurent tous les deux dans ce tuto sur l'encodage en utf-8 qui sans être exhaustif, permet de partir sur de bonnes bases.

Cette parenthèse fermée, il serait temps de revenir au topic initial :wink:

Re: Pourquoi sa coince ? Haa sa m'en bouche un coin !

par stealth35 » 07 janv. 2010, 20:29