Page 1 sur 1

Site multilingue, et REGEXP

Posté : 28 sept. 2008, 14:49
par netpsycho
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 : Tout sélectionner

<?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.

Posté : 28 sept. 2008, 19:13
par AB
Les '[' sont des caractères réservés dans les regex. Si tu veux les intégrer dans la recherche sur ton texte tu dois les échapper : \[

Posté : 28 sept. 2008, 19:29
par Invité
Merci pour cette réponse.
J'ai effectivement ajouté les slashes, mais sans succès, j'en suis là :
$pattern = "`\[".$lang."\].*\[\/".$lang."\]`";

Posté : 28 sept. 2008, 19:32
par AB
Ah bah oui mais maintenant les parenthèses capturantes ont disparues

Posté : 28 sept. 2008, 19:36
par netpsycho
Merci pour la réponse. Même avec, cela ne fonctionne pas :(
$pattern = "`\[".$lang."\](.*)\[\/".$lang."\]`";

Peut-être un problème avec le reste du code ?

Posté : 28 sept. 2008, 20:06
par AB
Merci pour la réponse. Même avec, cela ne fonctionne pas :(
$pattern = "`\[".$lang."\](.*)\[\/".$lang."\]`";

Peut-être un problème avec le reste du code ?
Maintenant il manque U pour ne pas être gourmand .. et puis pas la peine d'échapper les slashes

preg_match_all('#\['.$lang.'\](.*)\[/'.$lang.'\]#U', $row['article'], $matches);