Option GLOBAL non acceptée regex
RésoluPJ47 Messages postés 77 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
je fais suite à mon sujet précédent : https://forums.commentcamarche.net/forum/affich-37954204-securite-formulaire-html-php
je suis toujours dans mon logiciel webacapella, formulaire de contact pour lequel je souhaite ne pas autoriser les URl (toutes, pas seulement la première) ainsi que tous les caractères non latins (ex : Ողջույն, ես ուզում էի իմանալ ձեր գինը ....)
grâce à @jordan45 , j'ai découvert les regex et le site : https://regex101.com/
merci encore !
mon code aujourd'hui
$nom = strip_tags($_POST['nom']); $prenom = strip_tags($_POST['prenom']); $email = strip_tags($_POST['mail']); $string = preg_replace('/(https?:\/\/|www\.)([a-zA-Z0-9-_\.\/\?=&]+)/g', '-',$_POST['message']); $regex = preg_replace('/([^!A-Za-z0-9_\ \.\:\-\éèêëîï]+)/g', 'url', $string); $message = $regex;
dans regex101 les expressions me permettent parfaitement de trouver et remplacer les caractères et chaines non souhaitées ---> MAIS mon logiciel à priori n'accepte pas le "g" pour global - donc je suis coincée car seule la première URL est remplacée ...
Message d'erreur suite à la validation de mon formulaire :
Avertissement : preg_replace() : modificateur inconnu 'g' dans /home/besttermds/www/contact-best.php en ligne 21 Obsolète : preg_replace() : Passer null au paramètre n°3 ($subject) de type array|string est obsolète dans /home/besttermds/www /contact-best.php en ligne 22 Attention : preg_replace() : Modificateur inconnu 'g' dans /home/besttermds/www/contact-best.php en ligne 22 Erreur fatale : PDOException non interceptée : SQLSTATE[23000] : Violation de la contrainte d'intégrité : 1048 Colonne 'Message' ne peut pas être nul dans /home/besttermds/www/contact-best.php:27 Trace de la pile: #0 /home/besttermds/www/contact-best.php(27) : PDOStatement->execute(Array) #1 {principal} lancé /home/besttermds/www/contact-best.php en ligne 27
y'a t-il un autre moyen d'écrire ces regex sans le 'g' mais qui me permette de sonder tout le texte ??
Merci d'avance
J
Windows / Chrome 120.0.0.0
- Corinne copie un texte sur le web et le colle dans un document avec l'option "texte non formaté" (aussi appelée "texte sans mise en forme"). qu'est-ce qui est conservé ?
- Mise en forme conditionnelle excel texte - Guide
- Passer un texte de majuscule en minuscule ou inversement - Guide
- Transcription audio en texte word gratuit - Guide
- Mise en forme tableau word - Guide
- Texte barré whatsapp - Guide
3 réponses
Bonjour @jordane45 StatutModérateur
merci de ce retour, comme cela ne fonctionnait pas dans regex101, je l'avais effectivement mis - ok mes URL effectivement sont bien toutes supprimées.
en revanche
$string = preg_replace('/(https?:\/\/|www\.)([a-zA-Z0-9-_\.\/\?=&]+)/', '-',$_POST['message']); $regex = htmlentities($string); $regex1 = preg_replace('/([^!A-Za-z0-9_\ \.\:\-\éèêëîï]+)/', 'jen', $regex);
ne fonctionne pas pour les caractères non latins (ex : Ողջույն, ես ուզում էի իմանալ ձեր գինը) cela me supprime tout.
comment enlever ces caractères sans toucher au reste du message
merci beaucoup
Tu peux remplacer du texte écrit dans un alphabet non ASCII par une translittération en utilisant Transliterator::transliterate et iconv.
Par exemple, ton texte "Ողջույն, ես ուզում էի իմանալ ձեր գինը" (qui semble être de l'arménien) est remplacé comme ceci :
var_dump(iconv("UTF-8", "ASCII//TRANSLIT//IGNORE", transliterator_transliterate('Any-Latin; Latin-ASCII', "Ողջույն, ես ուզում էի իմանալ ձեր գինը")));
pour donner :
string(34) "Ogjuyn, es uzum ei imanal jer gin?"
(cela semble être de l'arménien selon Google Translate et cela voudrait dire : "Salut, je voulais connaître ton prix ?")
La translittération consiste à remplacer les caractères d'un jeu de caractères donné en un autre avec leur équivalent le plus proche.
Du coup, je pense que tu peux utiliser ta regexp pour supprimer les URL et faire une translittération pour n'avoir que de l'ASCII.