IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Résultat de strlen() différent de JS length


Sujet :

Langage PHP

  1. #1
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut Résultat de strlen() différent de JS length
    Bonjour à tous,

    Ben tout est dans le titre :

    J'affiche en JS le value.length d'un textarea avec une petite fonction. L'affichage se fait dans un petit champ texte.

    Lorsque je poste le formulaire, je teste le contenu du textarea avec strlen() ou mb_strlen()... et les résultats sont différents !

    Z'avez déjà vu ça ?

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 210
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 210
    Points : 8 437
    Points
    8 437
    Billets dans le blog
    17
    Par défaut
    Sûrement à cause de l'encodage.
    Donne un script court et fonctionnel illustrant tout cela ;-)

  3. #3
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Heureusement encore que les deux ne donnent pas le meme resultat sinon ca n'aurait pas valu le coup d'en faire deux.

    Concretement c'est mb_strlen() qui doit avoir le bon résultat : strlen() comptera 2 pour 1 seul caractère multibyte en UTF8 par exemple.

    juste pour l'anecdote, il y a en plus une version de PHP ou mb_strlen() se trompe quand le premier caractère est multibyte.

  4. #4
    Membre averti Avatar de renaud26
    Homme Profil pro
    Webmaster
    Inscrit en
    Mars 2003
    Messages
    1 365
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Webmaster

    Informations forums :
    Inscription : Mars 2003
    Messages : 1 365
    Points : 436
    Points
    436
    Par défaut
    Merci de vos réponses instructives. Voici un bout de code qui illustre le propos :

    Le textarea du formulaire "params" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    <textarea name="description"  style="width:100%" 
    onFocus="Compter(this,params.comptage)" 
    onKeyUp="Compter(this,params.comptage)" 
    onBlur="Compter(this,params.comptage)">
    </textarea>
    "comptage" est un petit champ texte situé au dessous.

    La fonction JS simplifiée:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    function Compter(Target, nomchamp)
    {
    StrLen = Target.value.length
    nomchamp.value = StrLen;
    }
    et le classique contrôle PHP :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $nb_cars = strlen($_POST['description']);
    if($nb_cars > 100){
    $err['description'] = "Votre description dépasse 100 caractères : ".$nb_cars."";
    }
    Ma page est encodée en UTF8. La fonction mb_strlen donne le même résultat que strlen.

    Voici le texte exemple de mon textarea :

    "Je m'appelle Toto et je réalise un test sur les différences entre la fonction strlen de php et le value.length de javascript."

    La différence entre les deux est de 2 caractères sur 125 :
    JS : 125.
    PHP : 127

    Voila. J'espère que vous pourrez m'éclairer.

  5. #5
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Oui juste un détail, mb_strlen() utilise l'encodage par défaut, il peut être utile de lui préciser :

    Sur ujn fichier UTF8 avec un serveur ISO :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    echo mb_strlen("é","UTF8"); // 1
    echo mb_strlen("é") // 2

Discussions similaires

  1. résultat sur somme différents
    Par debdba dans le forum Oracle
    Réponses: 7
    Dernier message: 04/02/2009, 18h53
  2. Réponses: 3
    Dernier message: 20/01/2009, 11h34
  3. Réponses: 1
    Dernier message: 13/05/2008, 10h44
  4. Réponses: 6
    Dernier message: 11/11/2007, 17h34
  5. [MySQL] Résultat de requête différent sur 2 serveurs identiques
    Par schlitters dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 17/12/2005, 00h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo