Forum |  HardWare.fr | News | Articles | PC | Prix | S'identifier | S'inscrire | Shop Recherche
373 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Comment tronquer un texte tout en préservant les balises html?

 



 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Comment tronquer un texte tout en préservant les balises html?

n°1565789
Masterping​ouin
Posté le 27-05-2007 à 11:35:59  profilanswer
 

Bonjour,
 
J'ai un texte relativement long à tronquer. Le texte est truffé de balises html et le script que j'ai trouvé sur le net ne préserve pas les balises.
 
Exemple :
 
Mon texte d'origine :

Code :
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <strong>Cras nisl nibh</strong>, mattis a, mattis gravida, varius luctus, est. Praesent id leo ut pede sagittis ullamcorper


 
Après tronquage :

Code :
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <strong>Cras nisl

 
 
L'idéal serait d'avoir :

Code :
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <strong>Cras nisl nibh</strong>


 
 
Voici le script que j'utilise :

Code :
  1. <?
  2. $max= 30; // on détermine combien de caractères maxi doit avoir le texte.
  3. if (strlen($texte)>$max) // la longueur du texte est-elle supèrieure à limite $max ?
  4. {
  5. $texte = substr($texte, 0, $max); // on tronque le texte avec comme limite le maximum de caractères autorisés.
  6. $espace = strrpos($texte, " " ); // Récupération du dernier espace pour ne pas couper un mot.
  7. $texte = substr($texte, 0, $espace); // la phrase est reformatée pour s'arrêter à l'éspace .
  8. $texte = $texte."..."; // on ajoute des points de suspension
  9. }
  10. else
  11. {
  12. echo $texte ; // sinon on affiche simplement le texte }
  13. ?>


 
Comment dois-je m'y prendre pour que le script prenne en compte les balises?
 
Merci de votre aide :hello:

mood
Publicité
Posté le 27-05-2007 à 11:35:59  profilanswer
 

n°1565807
Profil sup​primé
Posté le 27-05-2007 à 13:24:17  answer
 

Une idée serait, à mon avis, de rechercher la
dernière occurence du caractère "<" dans ta
chaîne.
 
Ici, ce serait le "<" du "<strong>" (caractère 58) de :

Code :
  1. Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <strong>Cras nisl


Bon, donc tu sais que le dernier "<", c'est le 58.
Tu regardes le caractère 59.
Oh ! C'est un "s" !!! Ce n'est donc pas un "\"...
La balise n'est donc pas fermée.
 
Du coup, tu cherches le caractère ">" qui suit le
58e. Ici, c'est le 65e (à la fin du "<strong>" ).
 
Tu copies cette chaîne (du 58 au 65) à la fin  
de ta chaîne en ajoutant un "\"...
 
Bon, je connais pas trop le PHP, mais le code  
ressemblerait à ça en VB (à toi de transposer ! :-D)
 

Code :
  1. ch = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. <strong>Cras nisl"
  2. <!-- On cherche le dernier "<" -->
  3. For i = Len(ch) To 1 Step -1
  4.    If Mid(Ch, i, 1) = "<" then
  5.       PosDeb = i
  6.       Exit For
  7.    End If
  8. Next i
  9. <!-- Si le caractère suivant est un "/", c'est bon, on arrête -->
  10. If Mid(Ch, PosDeb + 1, 1) = "/" Then End
  11. <!-- Sinon, on cherche le ">" qui suit -->
  12. For i = PosDeb To Len(Ch)
  13.    If Mid(Ch, i, 1) = ">" Then
  14.       PosFin = i
  15.       Exit For
  16.    End if
  17. Next i
  18. <!-- On récupère le texte (ici Strong) -->
  19. Texte = Mid(Ch, PosDeb + 1, PosFin - PosDeb)
  20. <!-- On rajoute la balise de fermeture -->
  21. Ch = Ch + "<\" + Texte + ">"


Voilà, voilà !!! J'espère que ça va t'aider !
 
Alors là, le problème de cette méthode, c'est qu'elle
ne marche pas dans trois cas :
1. <balise1><balise2>Mon texte</balise1>
2. <balise1><balise2>Mon texte
3. <balise1>Mon texte</ba


Message édité par Profil supprimé le 27-05-2007 à 13:28:26
n°1565817
Masterping​ouin
Posté le 27-05-2007 à 13:55:45  profilanswer
 

Je ne sais malheureusement pas transposer du vb en php. N'y a-t-il pas plus simple et un peu moins long?

n°1565825
did-54
Posté le 27-05-2007 à 14:30:47  profilanswer
 

- Tu lis le texte  
- A chaque balise ouvrante rencontrée, tu la mets sur le dessus d'une pile  
- A chaque balise fermante rencontrée tu retire la balise ouvrante de la pile
 
Au moment ou tu veux arreter le texte, tu balance tout ce que t'as sur la pile en fermant les balises...
 
Problème : Le html doit absolument etre bien formaté (pas de balise orpheline), mais ca peut s'arranger en vérifiant à chaque balise fermante qu'elle ferme bien la dernière balise de la pile, etc.


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Comment tronquer un texte tout en préservant les balises html?

 

Sujets relatifs
[HTML/JavaScript] Effacer la sélection d'un select multiple[C] fonction pour remplacer du texte dans une string
debutant HTML prob IE7Manipuler un simple fichier texte ?!
[Divers] Quel éditeur de texte pour mon besoinprobleme de librairie mime::lite:html
Lecture/Ecriture fichier texte vs MySQL ?Detecter un texte dans une page php
Appeller un programme en html/javascriptProblème avec DOCTYPE html PUBLIC
Plus de sujets relatifs à : Comment tronquer un texte tout en préservant les balises html?


Copyright © 1997-2018 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR