Précédent   Forum des professionnels en informatique > PHP > Langage > Regex
Regex Forum d'entraide sur les expressions rationnelles PHP. Avant de poster -> FAQ regex, Cours de regex et Sources de regex
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 28/09/2008, 13h38   #1
Invité de passage
 
Inscription : mai 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 7
Points : 3
Points : 3
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 :
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.
le_fleau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2008, 16h28   #2
Membre éprouvé
 
Avatar de mon_nom_est_personne
 
Inscription : mai 2008
Messages : 450
Détails du profil
Informations forums :
Inscription : mai 2008
Messages : 450
Points : 451
Points : 451
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 :
$pattern = "/\[".$lang."\].*\[\/".$lang."\]/";
je me pas l'option car je sais pas ce qu'elle vaut.
mon_nom_est_personne est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2008, 19h20   #3
Invité de passage
 
Inscription : mai 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 7
Points : 3
Points : 3
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 :
$pattern = "`\[".$lang."\].*\[\/".$lang."\]`";
mais toujours sans succès
le_fleau est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 28/09/2008, 19h47   #4
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Il faut bien une parenthèse capturante puisque le but est de récupérer le texte entre ces balises

Code :
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é).
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 29/09/2008, 23h20   #5
Invité de passage
 
Inscription : mai 2007
Messages : 7
Détails du profil
Informations forums :
Inscription : mai 2007
Messages : 7
Points : 3
Points : 3
Cette solution est parfaite, un grand merci
le_fleau est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h36.


 
 
 
 
Partenaires

Hébergement Web