Retourner dernière balise d'une chaine contenant de l'html [Résolu]

dvwyns 160 Messages postés mardi 2 janvier 2007Date d'inscription 7 mai 2012 Dernière intervention - 8 févr. 2010 à 22:56 - Dernière réponse : dvwyns 160 Messages postés mardi 2 janvier 2007Date d'inscription 7 mai 2012 Dernière intervention
- 11 févr. 2010 à 23:51
Bonsoir,
Pour afficher une pt partie d'une news qui se trouvera dans une page d'accueil, j'aimerais récupérer la dernière balise html qu'on retrouvera après avoir raccourci à 200 caractères cette news. En fait on écrit un article par l'intermédiaire de fckeditor, et pour pouvoir raccourcir sans couper juste après une balise ouvrante, j'ai besoin d'un regex me permettant de connaitre la dernière balise. Après je testerai si oui ou non c une balise ouvrante et si oui j'ajouterai une balise fermante.
J'espère que j'ai été assez clair.

Voici le code me permettant de limiter l'article à 200 caractères.

$max = 200;
$chaine = $data['texte'];
if (strlen($chaine) >= $max) {
$chaine = substr($chaine, 0, $max);
$espace = strrpos($chaine, " ");
$chaine = substr($chaine, 0, $espace)."...";
//ici se trouvera le regex
}

Je connais relativement bien les regex mais là, c'est au dessus de mes connaissances.
J'avais trouvé la fonction php preg_match_all qui me retourne toutes les occurences dans un tableau multi dimensionnel, mais je pense qu'il y moyen d'avoir un truc plus optimisé.
Merci
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 11 févr. 2010 à 22:00
3
Merci
faut faire une assertion :

[\s\S]*<(?!(br))(\w+).*?>

Renfield - Admin CodeS-SourceS - MVP Visual Basic

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Renfield
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 9 févr. 2010 à 08:25
0
Merci
a quoi ressemble ta source HTML ?


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
dvwyns 160 Messages postés mardi 2 janvier 2007Date d'inscription 7 mai 2012 Dernière intervention - 10 févr. 2010 à 09:06
0
Merci
Bonjour Renfield,
Et bien, c'est une source du type:

blablabla
blablabla


blablablablabla
ect...

En imaginant que je coupe la phrase au "blabla" entre les balise strong, je me retrouve avec une balise strong ouverte pouvant influencer le reste de ma page.
Et donc le but serait de voir que, après avoir coupé la phrase, la dernière balise de cette phrase est ouverte et donc par la suite mettre une balise fermante du même type.
Commenter la réponse de dvwyns
Renfield 17308 Messages postés mercredi 2 janvier 2002Date d'inscription 22 août 2018 Dernière intervention - 10 févr. 2010 à 09:45
0
Merci
récupérer le nom de la dernière balise ouvrante, en somme ...

[\s\S]*<(\w+).*?>

après, si tu ajoutes une fermante alors qu'elle existe déjà, ca n'est pas dramatique


Renfield - Admin CodeS-SourceS - MVP Visual Basic
Commenter la réponse de Renfield
dvwyns 160 Messages postés mardi 2 janvier 2007Date d'inscription 7 mai 2012 Dernière intervention - 11 févr. 2010 à 21:00
0
Merci
J'ai testé ton regex et il fonctionne bien à une exception près que j'ai oublié de mentionner. Des balise br (
) sont possible. J'ai essayé d'ajouter cette règle dans le regex mais je n'y suis pas arriver. Peut être pourra tu encore m'aider.

$chaine = "Je trouve incroyable qu'il ne veille pas fonctionner.

Chaque fois c la meme chose, mais je reviens tjs content qu'il
soit prêt a me recevoir


pourquoi pas en fait.

Antoine

";
preg_match("#[\s\S]*<(\w+).*?[^\b?/]>#",$chaine,$tab);// [^\b?/] essai pour br mais non concluant
echo $tab[count($tab)-1];

Merci
Commenter la réponse de dvwyns
dvwyns 160 Messages postés mardi 2 janvier 2007Date d'inscription 7 mai 2012 Dernière intervention - 11 févr. 2010 à 23:51
0
Merci
Excellent !!!
Merci pour ton aide.

Voici le code qui permet d'afficher une partie d'un texte, comprenant des balise html, venant du base de données sans avoir d'effet indésirable sur la suite de votre site.
Et on dit merci à qui? A Renfield ;)

$max = 200;
$chaine = $data['texte'];
if (strlen($chaine) >= $max) {
$chaine = substr($chaine, 0, $max);
$espace = strrpos($chaine, " ");
$chaine = substr($chaine, 0, $espace)."...";
}
preg_match("#[\s\S]*<(?!(br))(\w+).*?>#",$chaine,$tab);
if(count($tab)>0)
$chaine.= "</".$tab[count($tab)-1].">";
$chaine.="
";
Commenter la réponse de dvwyns

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.