Option GLOBAL non acceptée regex

Résolu
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   -  
PJ47 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

A voir également:

3 réponses

jordane45 Messages postés 38486 Date d'inscription   Statut Modérateur Dernière intervention   4 752
 

Bonjour, 

le 'g' est implicite dans la fonction preg_replace. Tu n'as pas besoin de le mettre.


0
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

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

0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 

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.

0
PJ47 Messages postés 77 Date d'inscription   Statut Membre Dernière intervention   1
 

Bonjour @[Dal] StatutContributeur

merci beaucoup pour cette solution !! effectivement mes caractères sont bien transformés ! merci beaucoup, je commençais à désespérer de trouver une méthode.

Merci !!

Bonne Journée

J

0