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ème pour fermer des balises [RegEx]


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 62
    Points
    62
    Par défaut Problème pour fermer des balises
    voici un exposé rapide de mon problème :
    j'ai des projets avec des synopsis très long.
    je voudrais donc afficher une partie seulement du synopsis.
    le problème est que les synopsis sont de ce style :
    <h4>Carl Allen est au point mort. <i>No future</i>... jusqu'au jour o&ugrave; il s'inscrit &agrave; un programme de d&eacute;veloppement personnel bas&eacute; sur une id&eacute;e toute simple : dire oui &agrave; tout ! Carl d&eacute;couvre avec &eacute;blouissement le pouvoir magique du <i>&quot;Yes&quot;</i>, et voit sa vie professionnelle et amoureuse boulevers&eacute;e du jour au lendemain : une promotion inattendue, une nouvelle petite amie... Mais il d&eacute;couvrira bient&ocirc;t que le mieux peut &ecirc;tre l'ennemi du bien, et que toutes les occasions ne sont pas bonnes &agrave; prendre</h4>
    donc comme vous le voyez il y a des balises qui s'ouvrent et se ferment. mais quand je n'affiche qu'une partie certaines de ces balises ne se ferment pas.
    je voulais donc écrire un script pour les fermer automatiquement !

    le script :
    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
    22
    23
    24
    25
    26
    27
    28
    while($tb=mysql_fetch_array($sql)){
    	$i++;
    	$synopsisPetit=substr($tb['synopsis_projets'], 0, 300);
    	$ouvertes="#((<)([a-zA-Z0-9]+>))#";
    	$fermees="#</[a-zA-Z0-9]+>#";
    	preg_match_all($ouvertes, $synopsisPetit, $tbOuv, PREG_PATTERN_ORDER);
    	preg_match_all($fermees, $synopsisPetit, $tbFerm, PREG_PATTERN_ORDER);
    	$nbOuv=count($tbOuv[0]);
    	$nbFerm=count($tbFerm[0]);
    	echo '<pre>';
    	print_r($tbOuv);
    	echo '</pre>';
    if($nbOuv>$nbFerm){
    	$nombre=$nbOuv-$nbFerm;
    	$m=0;
    	while($nombre>0){
    		if(preg_match('#((<)([a-zA-Z0-9]+>))#', $tbOuv[0][$m])){
    			$text=preg_replace('#((<)([a-zA-Z0-9]+>))#', "$2/$3", $tbOuv[0][$m]);
    		}
    		else{
    			$text="merde";
    		}
    		echo '<pre>'.$text.'</pre> youpi';
    		$m++;
    		$nbFerm++;
    		$nombre=$nbOuv-$nbFerm;
    	}
    }
    Array
    (
    [0] => Array
    (
    [0] =>
    [1] =>
    [2] =>
    )
    [1] => Array (
    [0] =>
    [1] =>
    [2] =>
    )
    [2] => Array (
    [0] => <
    [1] => <
    [2] => <
    )
    [3] => Array (
    [0] => h4>
    [1] => i>
    [2] => i>
    )
    )

    youpi

    youpi
    donc le print_r comme vous pouvez le voir me sort le bon nombre d'occurences dans les tableaux mais ne me montre pas ce qu'il y a dedans (pour les tableau 0 et 1) et pour les autres, tout va bien !

    j'ai testé mes regex sur test de regex et elles fonctionnent très bien !
    donc je ne comprends pas !

    help :'(

    merci d'avance

  2. #2
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    Ca ne résout pas complètement ton problème, mais cela te mettra peut-être sur une piste :
    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
     
    <?php
    print "<pre>";
     
    $myString = "<h4>Carl Allen est au point mort. <i>No future</i>... jusqu'au jour o&ugrave; il s'inscrit &agrave; un programme de d&eacute;veloppement personnel bas&eacute; sur une id&eacute;e toute simple : dire oui &agrave; tout ! Carl d&eacute;couvre avec &eacute;blouissement le pouvoir magique du <i>&quot;Yes&quot;</i>, et voit sa vie professionnelle et amoureuse boulevers&eacute;e du jour au lendemain : une promotion inattendue, une nouvelle petite amie... Mais il d&eacute;couvrira bient&ocirc;t que le mieux peut &ecirc;tre l'ennemi du bien, et que toutes les occasions ne sont pas bonnes &agrave; prendre</h4>";
     
    $myPattern = '#<([a-zA-Z0-9]+)>#';
    preg_match_all($myPattern, $myString, $allMatches);
    $myBalises = $allMatches[1];
    print_r($myBalises);
     
    $myPattern = '#</([a-zA-Z0-9]+)>#';
    preg_match_all($myPattern, $myString, $allMatches);
    $myBalises = array_reverse($allMatches[1]);
    print_r($myBalises);
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 62
    Points
    62
    Par défaut
    désolé de ne répondre que maintenant mais c'est que je n'ai le net que la semaine !
    je vais étudier ton code car il fonctionne et je ne comprends pas trop où est là différence par rapport au mien à part que tu mets "print '<pre>'" au lieu de "echo '<pre>'"

    en tout cas merci =)

  4. #4
    Membre expert
    Avatar de s.n.a.f.u
    Homme Profil pro
    Développeur Web
    Inscrit en
    Août 2006
    Messages
    2 760
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2006
    Messages : 2 760
    Points : 3 545
    Points
    3 545
    Par défaut
    La différence est là
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $myBalises = $allMatches[1];
    Je n'utilise que le contenu capturé
    • Avant de poser une question, n'hésitez pas à chercher dans la FAQ et les forums
    • Merci d'utiliser les balises de code (# dans l'éditeur)
    • N'oubliez pas de vous servir des boutons , et

    S.N.A.F.U

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Janvier 2008
    Messages
    78
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2008
    Messages : 78
    Points : 62
    Points
    62
    Par défaut
    ben en fait après étude m'en suis rendu compte oué ^^ donc maintenant grâce à ton aide j'arrive à fermer les balises grande évolution ! me reste plus qu'à voir quelles balises il faut que je ferme maintenant car pour l'instant dans un cas du genre "<h2>x</h2><i>fdsfds" la balise que je ferme est <h2> et pas <i> étant donné que je prends la première ! mais bon, va falloir que je compare les balises maintenant xD
    je mets résolue ou pas ? car une partie du problème l'est mais l'autre partie non ^^ mais là, je ne sais pas si ça concerne encore les regex car j'ai pas encore commencé !

    en tout cas grand merci car j'ai compris grâce à ton code =)

    bon ben cette fois-ci c'est résolu !
    pour ceux qui voudraient le code (bon d'accord j'ai codé avec les pieds mais ça fonctionne quand même !) je le post (je vais le transformer en fonction aussi comme ça ça sera plus simple à adapter) :
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    $i=0;
    while($tb=mysql_fetch_array($sql)){
    	$i++;
    	$synopsisPetit=substr($tb['synopsis_projets'], 0, 300);
    	$ouvertes="#<([a-zA-Z0-9]+)>#";
    	$fermees="#</([a-zA-Z0-9]+)>#";
    	preg_match_all($ouvertes, $synopsisPetit, $tbOuv, PREG_PATTERN_ORDER);
    	preg_match_all($fermees, $synopsisPetit, $tbFerm, PREG_PATTERN_ORDER);
    	$nbOuv=count($tbOuv[1]);
    	$nbFerm=count($tbFerm[1]);
    	if($nbOuv>$nbFerm){
    		$nombre=$nbOuv-$nbFerm;
    		$m=0;
    		$n=0;
    		$balise=array();
    		while($nombre>0){
    			if(isset($tbFerm[1][$m])){
    				if($tbOuv[1][$m]!=$tbFerm[1][$m]){
    					$text=preg_replace('#([a-zA-Z0-9]+)#', '</$1>', $tbOuv[1][$m]);
    				}
    				$balise[$n]=$text;
    				$m++;
    				$nbFerm++;
    				$nombre=$nbOuv-$nbFerm;
    			}
    			else{
    				$text=preg_replace('#([a-zA-Z0-9]+)#', '</$1>', $tbOuv[1][$m]);
    				$balise[$n]=$text;
    				$m++;
    				$nbFerm++;
    				$nombre=$nbOuv-$nbFerm;
    			}
    			$n++;
    		}
    	}
    	echo '<div>
    		<h2>'.$tb['titre_projets'].'</h2>
    		'.$synopsisPetit;
    		for($a=count($balise)-1;$a>=0;$a--){
    			echo $balise[$a];
    		}
    		echo '<a href="projets.php?projet='.$tb['num_projets'].'" title="Lire la suite">...</a>';
    		$hr=$nbProjets-$i+1;
    		if($hr>1){
    			echo '<hr>';
    		}
    	echo '</div>';
    }
    merci pour tout

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

Discussions similaires

  1. [win] problème pour partager des fichiers entre 2 pc
    Par goma771 dans le forum Administration
    Réponses: 1
    Dernier message: 01/12/2005, 16h15
  2. Option pour samba pour fermer des sessions windows
    Par cybernetique dans le forum Réseau
    Réponses: 7
    Dernier message: 04/10/2005, 11h05
  3. [XML word] problème pour créer des puces
    Par ratapapa dans le forum XML/XSL et SOAP
    Réponses: 1
    Dernier message: 21/07/2005, 13h52
  4. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30
  5. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13

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