type="file" pattern

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 : type="file" pattern

Re: type="file" pattern

par @rthur » 08 janv. 2021, 09:43

Moi je fais ça pour nettoyer une string :
<?php
$string = "Öh Fóø Bår PHPfrance Héhé_&=)@ç<> ^ ok.xlsx";

// Remplacement des caractères accentués
$string = html_entity_decode(preg_replace('/&([a-z])(acute|uml|circ|grave|ring|cedil|slash|tilde|caron|lig|quot|rsquo);/i', '\\1', htmlentities($string, ENT_COMPAT, 'utf-8')));

// Retrait de tous les caractères autres qu'alpha-numériques pour les remplacer par des tirets
$string = trim(preg_replace(array('/[^a-z0-9\.-]/i', '/[-]+/') , '-', $string), '-');

var_dump($string);

Re: type="file" pattern

par ChrisCMoi62 » 07 janv. 2021, 18:33

Bonjour,
Pour renommer le fichier j'ai essayé avec preg_replace, pour les espaces ça fonctionne mais pas pour les lettres accentuées.

<?php
$dossier = '/upload/';
$<?php
$dossier = '/upload/';
$image = basename($_FILES['image']['name']);
$taille_maxi = 1024 * 1024;
$taille = filesize($_FILES['image']['tmp_name']);
$extensions = array('.jpg', '.jpeg');
$extension = strrchr($_FILES['image']['name'], '.');
if(!in_array($extension, $extensions))
{
echo '<p class="erreur">L'image doit être au format jpg ou jpeg</p>';
}
if($taille>$taille_maxi)
{
echo '<p class="erreur">Le poids de la vignette dépasse 1 Mo</p>';
}
if(!isset($erreur))
{
$image = strtr($vignette,'ÀÁÂÃÄÅÇÈÉÊËÌÍÎÏÒÓÔÕÖÙÚÛÜÝàáâãäåçèéêëìíîïðòóôõöùúûüýÿ','AAAAAACEEEEIIIIOOOOOUUUUYaaaaaaceeeeiiiioooooouuuuyy');
$image = preg_replace('/([^.a-z0-9]+)/i', '-', $image);
if(move_uploaded_file($_FILES['image']['tmp_name'], $dossier . $image))
{
}
else
{
echo '<p class="erreur">Echec de transfert de l'image !</p>';
}
}
else
{
echo $erreur;
}
?>

Re: type="file" pattern

par @rthur » 06 janv. 2021, 15:32

Ça transfère le fichier uploadé en spécifiant son nom donc si tu indiques un autre nom ça le renommera en même temps.
C'est d'ailleurs la meilleure solution, quasiment aucun site n'impose de restriction sur le nommage des fichiers à uploader, c'est traité côté serveur.

Re: type="file" pattern

par ChrisCMoi62 » 06 janv. 2021, 14:25

move_upload_file c'est pour transférer pas pour renommer ?

Re: type="file" pattern

par Spols » 06 janv. 2021, 12:56

non ce n'est pas trés couteux car pour l'upload tu dois utilisé la fonction move_upload_file qui permet de renommer dans la foulée. un petit coup de strtr sur le filename et le tour est joué

Re: type="file" pattern

par ChrisCMoi62 » 06 janv. 2021, 10:13

Oui en effet c'est une possibilité, mais remplacer les é è ê ë, les espaces, quand il y a plusieurs champs type="file" ça risque d'être lourd non?

Re: type="file" pattern

par Spols » 06 janv. 2021, 09:20

Tu peux aussi renommer le fichier aprés upload en remplacant les caractères non autorisé par un _ par exemple.

Re: type="file" pattern

par ChrisCMoi62 » 04 janv. 2021, 13:05

Merci de ta réponse, l'attribut accept se limite au format de fichier et donc en effet va falloir que j'utilise Java pour les caractères autorisés pfff galère

Re: type="file" pattern

par @rthur » 04 janv. 2021, 12:49

L'attribut pattern fait bien partie de HTML5 : https://www.w3.org/TR/html52/sec-forms. ... -attribute

En revanche, un pattern s'applique à la value du champ concerné du coup je doute que ça fonctionne sur les champs de type "file".
À mon sens ça ne doit fonctionner que sur des champs input de type "text" et ses dérivés (date, search, url, tel, email, password)

Si c'est pour vérifier le type de fichier, tu peux utiliser l'attribut "accept"
https://developer.mozilla.org/fr/docs/W ... ile#accept
Si tu veux faire ta vérification sur les caractères contenus dans le nom du fichier, il va falloir que tu fasses du javascript ou du post-traitement en PHP.

type="file" pattern

par ChrisCMoi62 » 03 janv. 2021, 12:51

Bonjour,
Depuis HTML5 il semblerait que l'on ne puisse utiliser "pattern" pour autoriser ou interdire certains caractères, or, j'aimerais savoir s'il y a un moyen de remédier à ce problème ?
Merci.

<input accept="image/jpeg" type="file" name="image" id="image" data-multiple-caption="{count} files selected"/>