Fork me on GitHub






Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Newbie
Inscrit: 14/07/2010 15:22
Messages: 11
Bonjour à tous !

J'ai un soucis.
Je cherche à nettoyer la saisie dans un formulaire Xoops de tous caractères accentués ou de caractères spécifiques à une langue.
Uniquement des caractères alphabétique standards.

De plus la sortie doit être en majuscule (la seule chose que j'arrive à faire d'ailleurs)

J'ai essayé avec un peu de jscript, mais sans succès.

A part un traitement PHP après la validation du formulaire, je vois pas.
Mais j'aimerais que ce soit lors de la saisie pour que l'utilisateur puisse vérifier si il ne désire pas corriger la correction automatique.

Pour le moment voici le code que j'utilise pour mettre en majuscule :

$form_firstname = new XoopsFormText(MA_FIRSTNAME'form_firstname'50100'');
$form_firstname->setExtra('onChange="javascript:this.value=this.value.toUpperCase();"');
$form->addElement($form_firstnamefalse);


Mais ce code garde le caractère accentué en majuscule.
é -> É

Si vous avez une piste ou un début de solution...

Merci !

Posté le : 09/08/2010 21:52
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Xoops accro
Inscrit: 20/02/2008 20:27
De Belgium
Messages: 2708
Avec charCodeAt on peut tester que les caractères sont admissibles. Exemple:
for (i=0i<monvar.lengthi++) {
if (
monvar.charCodeAt(i)>127) {
alert("Utilisez ASCII.");
return 
false;
   }
}

Posté le : 10/08/2010 12:15

Salutations, Gerard.
PS: Excusez mon mauvais français.
De la bonne manière de poser les questions
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Régulier
Inscrit: 09/04/2006 21:04
Messages: 423
Bonjour,

Il a y une chose qu'il faut savoir : PHP travaille en ISO, donc si ton texte est en UTF8 il faut le décoder, le traiter avec tes fonctions. Ensuite le ré-encoder en UTF8. Ce qui donne ceci :

function maFonction($content)
{
    
$content utf8_decode($content);
    
$content strip_tags($content);
    
// Mettre la chaîne en miniscule
    
$content strtolower($content);
    
// Suprimer les caractères invisibles en début et en fin de ligne
    
$content trim($content);
    
// Transformation des caractères accentués purs
    
$pattern = array("è","é","ê","ë","ç","à","â","ä","î","ï","ù","ü","û","ô","ö");
    
$rep_pat = array("e","e","e","e","c","a","a","a","i","i","u","u","u","o","o");
    
$content str_replace($pattern$rep_pat$content);
    
// Mettre le texte en majuscule
    
$content strtoupper($content);
    return 
utf8_encode($content);
}


Pour exploiter la fonction :

$montexte = maFonction($_POST['EXEMPLE']);

Posté le : 10/08/2010 16:53

Développeur web.
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Newbie
Inscrit: 14/07/2010 15:22
Messages: 11
Ankyo,pourquoi en ISO ?
Mon serveur accepte ISO-8859-1 et utf-8.
En tout cas, c'est ce qu'il me renvoit dans le phpinfo.

Merci Ghia, je ne connaissais pas cette fonction.
Je vais la tester.

Posté le : 10/08/2010 23:00
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Régulier
Inscrit: 09/04/2006 21:04
Messages: 423
Citation :
Ankyo,pourquoi en ISO ?

C'est tout simplement le jeu de caractères utilisés (nativement) par le php.

Citation :
Mon serveur accepte ISO-8859-1 et utf-8.

Ceci n'a rien avoir. Même si ton serveur supporte l'utf8, de toute façon Apache et PHP travaillent en iso.

En gros l'iso est la langue maternelle du php Si tu commences à lui sortir des phrases en chinois (utf8) il ne va pas comprendre sauf si tu lui traduit le chinois, d'ou les fonctions utf8_decode et utf8 encode .

PS : Je parlais des textes utf8 en provenance des formulaires ou la base de données, pas des fichiers qui contiennent des accents, et autres caractères spéciaux.

Plus de détails ici :
http://forum.phpfrance.com/faq-tutoriels/encodage-utf-t245062.html

Posté le : 11/08/2010 01:20

Développeur web.
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Newbie
Inscrit: 14/07/2010 15:22
Messages: 11
Merci pour tes explications.
Très intéressant le lien, en particulier la configuration Apache, MySQL et PHP.
Ca m'a fait penser qu'il faudrait que je me penche que l'utilistion d'Eclipse pour mes projets.

Posté le : 13/08/2010 16:39
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Newbie
Inscrit: 14/07/2010 15:22
Messages: 11
Ce code à l'air de fonctionner :
function search_bad_character($string) {
        for (
$i=0$i<strlen($string); $i++) { 
            if (
ord(substr($string,$i,1))<65 && ord(substr($string,$i,1))>90 && ord(substr($string,$i,1))<97 && ord(substr($string,$i,1))>122) {
                return 
false;
                exit(); 
            } 
        }
        
        return 
$string;
    }


Merci Ghia !

Posté le : 14/08/2010 18:25
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Newbie
Inscrit: 14/07/2010 15:22
Messages: 11
Finalement c'est celui-ci qui fonctionne :
function search_bad_character($string) {         for ($i=0$i<strlen($string); $i++) {              $char_ascii ord(substr($string,$i,1));              if ($char_ascii<65) {                 return false;                 exit();              }               if ($char_ascii>122) {                 return false;                 exit();              }                                       if ($char_ascii>90 && $char_ascii<97) {                 return false;                 exit();              }          }                  return $string;     }

Posté le : 14/08/2010 18:44
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Newbie
Inscrit: 14/07/2010 15:22
Messages: 11
Pour ceux qui pourraient être intéressé, voici ma fonction plus efficace et plus évolutive :

function search_bad_character($string) {
    
$tbl_charok '48,49,50,51,52,53,54,55,56,57
,65,66,67,68,69,70,71,72,73,74,75,76,77,78,79,80,81,82,83,84,85,86,87,88,89,90         ,97,98,99,100,101,102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121,122         ,46,64,95'
;                                        
    
$tbl_charok explode(','$tbl_charok);
    for (
$i=0$i<strlen($string); $i++) {
        
$char_ascii ord(substr($string,$i,1));
        if (!
in_array($char_ascii$tbl_charok)) {
            return 
false;
        }
    }

    return 
$string;
}


Il suffit d'ajouter le code ASCII dans la liste pour autoriser un caractère.

Posté le : 15/08/2010 15:58
Partager Twitter Partagez cette article sur GG+
Re: Formulaire Xoops et nettoyage des chaines de caractères accentuées.
Xoops accro
Inscrit: 20/02/2008 20:27
De Belgium
Messages: 2708
Variante est de définir charok comme string de '0123456789ABCDEF etc' et utiliser le substr pour déterminer que le caractère est admissible.

Posté le : 15/08/2010 20:46

Salutations, Gerard.
PS: Excusez mon mauvais français.
De la bonne manière de poser les questions
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

50 Personne(s) en ligne (38 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 50 | Plus ...