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 :

Site multilingue, et REGEXP [RegEx]


Sujet :

Langage PHP

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut Site multilingue, et REGEXP
    Bonjour à tous,
    J'ai un site multilingue, et je voudrais offrir la possibilité à mes visiteurs de publier des contenus dans la langue de leur choix, à travers des balises : [fr]Blabla[/fr] pour le français, [en]text example[/en] pour l'anglais, etc.

    C'est à dire qu'en fonction de la langue de navigation choisie par le visiteur du site, le texte affiché soit celui correspondant aux balises (ex: un visiteur visite le site anglais, je souhaite que seul le contenu entre les balises [en] et [/en] soit affiché). Par ailleurs si ces balises ne sont pas utilisées, je souhaiterais que le texte s'affiche complètement.

    La langue de navigation courante est représentée par la variable $lang. (ex: $lang = "fr" pour le français).

    Voici la REGEX que j'ai essayé de mettre en place, sans succès :
    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
    19
    20
    21
     
    <?php
    $lang = "fr";
    	$sql = "SELECT article FROM bd";
    	$result = mysql_query($sql) OR die(mysql_error());
    	while($row=mysql_fetch_assoc($result))
    		{
    		$pattern = "/[".$lang."](.*)[\/".$lang."]/U";
    		echo $pattern;
    		preg_match_all($pattern,$row['article'],$match); 
    $x = 0;
    if ( count( $match[1] ) >= $x ) {
      echo $match[1][$x-1];
    }
    else {
      echo $row['article'];
    }
     
    		}
    	}
    ?>
    Je pense qu'il y a un problème dans le motif, puisque même quand il n'y a pas de balises, il m'indique qu'il en trouve et il n'affiche pas de résultat...

    Pour info : j'ai suivi le code donné dans ce topic

    D'avance merci pour votre aide.

  2. #2
    mon_nom_est_personne
    Invité(e)
    Par défaut
    perso je n'utiliserais pas () car en regex ca sert a definir une variable.
    deux les [ son des caractere de controle en regex qui servent a defini un interval par exemple [fr]blabla va retourner vrai pour fblabla ou rblabla donc mettre des antislashes devrait aider
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = "/\[".$lang."\].*\[\/".$lang."\]/";
    je me pas l'option car je sais pas ce qu'elle vaut.
    Dernière modification par Bisûnûrs ; 29/09/2008 à 08h57. Motif: Merci d'utiliser la balise [code] (#)

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Merci pour cette réponse.
    J'ai modifié le motif avec ce que tu as proposé, mais sans succès.

    J'ai ensuite essayé ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $pattern = "`\[".$lang."\].*\[\/".$lang."\]`";
    mais toujours sans succès

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Points : 17 777
    Points
    17 777
    Par défaut
    Il faut bien une parenthèse capturante puisque le but est de récupérer le texte entre ces balises

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    $lang = "fr";
    $sql = "SELECT article FROM bd";
    $result = mysql_query($sql) OR die(mysql_error());
    while($row=mysql_fetch_assoc($result)) {
    	if (preg_match('#\[' . $lang . '\](.*)\[/' . $lang . ']#Us', $row['article'], $match)) {
    		echo $match[1];
    	} else {
    		echo $row['article'];
    	}
    }
    Et s'il n'y a qu'une capture, inutile de faire appel à preg_match_all (ce que j'ai supposé).

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 7
    Points : 7
    Points
    7
    Par défaut
    Cette solution est parfaite, un grand merci

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

Discussions similaires

  1. Site multilingue - méthode ?
    Par khephren dans le forum Général Conception Web
    Réponses: 12
    Dernier message: 21/06/2016, 17h18
  2. [Cookies] problème avec site multilingue
    Par lacfab dans le forum Langage
    Réponses: 13
    Dernier message: 30/12/2005, 23h10
  3. [Tableaux] Site multilingue
    Par francis m dans le forum Langage
    Réponses: 15
    Dernier message: 10/12/2005, 01h58
  4. Site multilingue : comment s'y prendre ?
    Par sg-40 dans le forum Général Conception Web
    Réponses: 3
    Dernier message: 26/04/2005, 14h40
  5. [C#] Mise en place d'un site multilingue
    Par regbegpower dans le forum ASP.NET
    Réponses: 6
    Dernier message: 19/03/2004, 19h15

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