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 :

Problématique UTF-8 / iso-8859-1 dans les regex [RegEx]


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut Problématique UTF-8 / iso-8859-1 dans les regex
    Bonjour à tous (et meilleurs voeux pour l'année 2010 !!)

    Je propose à votre sagacité les essais suivants que j'ai effectués après avoir lu quelques post sur ce forum et consulté des tutos à ce sujet mais sans vraiment trouver la réponse.

    Donc voici le problème: J'envoie à partir d'un formulaire (method post) un textarea représentant une phrase type news donc je voudrais que les accents et ponctuations soient autorisés.

    Voici les deux codes

    Le formulaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Mon forum</title> 
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta http-equiv="Content-Language" content="fr" />
    </head>
    <body>
    	<form action = "verif.php" method="post">
    		<textarea name="phrase" col="50" rows="5"></textarea>
    		<input type="submit" name="envoyer" value="envoyer" />
    	</form>
    </body>
    </html>
    La page de verif:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Mon forum</title> 
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta http-equiv="Content-Language" content="fr" />
    </head>
    <body>
    	<?php
    		$texte = $_REQUEST['phrase'];
    		$comp = "/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/";
    		echo $texte."<br />".$comp."<br />".preg_match($comp,$texte);
    	?>
    </body>
    </html>
    Les deux pages sont codées en UTF-8. Mais les résultats suivants s'affichent lorsque j'envoie le mot "futé" dans le textarea:
    futé // le mot futé est bien reçu
    /^[a-zA-Z0-9 ���������\'\.;:,!-\?]+$/ // la variable $comp de comparaison ne s'affiche pas correctement !!??
    0 // et plus fort le résultat du test est 0 alors que futé ne comporte pas de caractère interdit


    Je me suis dit que puisque $comp n'était pas affiché correctement le problème venait peut être de lui. J'ai donc codé $comp en utf-8 avant le test.

    verif.php devient:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Mon forum</title> 
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta http-equiv="Content-Language" content="fr" />
    </head>
    <body>
    	<?php
    		$texte = $_REQUEST['phrase'];
    		$comp = "/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/";
    		$comp = utf8_encode($comp);
    		echo $texte."<br />".$comp."<br />".preg_match($comp,$texte);
    	?>
    </body>
    </html>
    et le résultat pour "futé" devient:
    futé
    /^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/
    1

    Cette fois $comp s'affiche correctement et le résultat du test est ok.
    Je suppose que c'est parce que PHP est configuré par défaut en ISO-8859-1 que l'on observe ces résultat et la nécessité de coder en UTF-8 la variable $comp ? Faut-il systématiquement codé les variables de comparaison lorsqu'il y a des accents dans les textes à comparer ? Ou y a-t-il une autre explications ?

    Je me suis amusé à faire ces deux mêmes essais avec les deux pages codées en ISO-8859-1 en modifiant la ligne suivante dans chaque page:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1" />
    J'observe les résultats suivants:
    avec $comp non codé UTF-8:
    futé
    /^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/
    0

    avec $comp codé en UTF-8
    futé
    /^[a-zA-Z0-9 éèà çâêîôû\'\.;:,!-\?]+$/
    1


    Les résultats des tests sont les mêmes mais les affichages ne sont pas compris par les navigateurs puisque eux attendent de l'ISO-8859-1.

    En conclusion j'ai du mal à comprendre pourquoi le textarea semble toujours envoyer de l'UTF-8 puisque si je code pas $comp dans ce format la comparaison ne fonctionne pas et cela indépendamment du codage de la page. Bref je patauge ....

    Quelqu'un a-t-il une explication plus académique à me proposer ?

    A bientôt

  2. #2
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    rajoute le modifyer u à ta regExp
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    Lorsque j'ajoute ce modificateur j'obtiens la réponse suivante pour une variable:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $comp = "/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/u";
    Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 13 in E:\wamp\www\essais_divers\verif.php on line 14

    voici le code complet de verif.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
    <head>
    	<title>Mon forum</title> 
    	<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    	<meta http-equiv="Content-Language" content="fr" />
    </head>
    <body>
    	<?php
    		$texte = $_REQUEST['phrase'];
    		$nom = $_REQUEST['nom'];
    		$comp = "/^[a-zA-Z0-9 éèàçâêîôû\'\.;:,!-\?]+$/u";
    		echo $texte."<br />".$comp."<br />".preg_match($comp,$texte);
    		echo "<hr>";
    		echo $nom."<br />".$comp."<br />".preg_match($comp,$nom);
    	?>
    </body>
    </html>
    et cela quelque soit le codage de la page iso-8859-1 ou utf-8.

    en continuant à fouiller aux niveau des codages de page, j'ai trouvé la norme iso-8859-15. Avec cette norme, les tests se déroulent correctement (sans avoir recours à l'encodage de $comp) et les affichages sont corrects également.

    Ben là j'comprends plus rien

  4. #4
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $comp = "#^[a-zA-Z0-9 éèàçâêîôû'.;:,!?-]+$#u";
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2008
    Messages
    11
    Détails du profil
    Informations personnelles :
    Âge : 61
    Localisation : France

    Informations forums :
    Inscription : Avril 2008
    Messages : 11
    Par défaut
    Non toujours la même erreur

    Warning: preg_match() [function.preg-match]: Compilation failed: invalid UTF-8 string at offset 13 in E:\wamp\www\essais_divers\verif.php on line 13

  6. #6
    Rédacteur/Modérateur

    Avatar de SpaceFrog
    Homme Profil pro
    Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Inscrit en
    Mars 2002
    Messages
    39 659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : Royaume-Uni

    Informations professionnelles :
    Activité : Développeur Web Php Mysql Html Javascript CSS Apache - Intégrateur - Bidouilleur SharePoint
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2002
    Messages : 39 659
    Billets dans le blog
    1
    Par défaut
    le fichier lui même est en utf8 ?
    Ma page Developpez - Mon Blog Developpez
    Président du CCMPTP (Comité Contre le Mot "Problème" dans les Titres de Posts)
    Deux règles du succès: 1) Ne communiquez jamais à quelqu'un tout votre savoir...
    Votre post est résolu ? Alors n'oubliez pas le Tag

    Venez sur le Chat de Développez !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Probleme Codage UTF-8 ISO-8859-1
    Par maskk dans le forum Développement
    Réponses: 1
    Dernier message: 10/11/2010, 10h14
  2. [CR 8] UTF-8 problème d'affichage dans les rapports
    Par michael michael dans le forum SAP Crystal Reports
    Réponses: 1
    Dernier message: 17/11/2009, 16h11
  3. ASP.NET CHARSET UTF-8 iso-8859-1
    Par hottnikks_79 dans le forum VB.NET
    Réponses: 1
    Dernier message: 19/07/2009, 16h10
  4. [Smarty] Pbm en ISO-8859-1 sur les pages incluses. Solution sans utiliser UTF8?
    Par Invité dans le forum Bibliothèques et frameworks
    Réponses: 1
    Dernier message: 24/06/2008, 20h44

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