Scinder un texte html sans casser les balises

Scinder un texte html sans casser les balises - PHP - Programmation

Marsh Posté le 06-07-2010 à 14:47:37    

Bonjour,
 
J'ai besoin de scinder un long texte HTML et d'en récupérer les 100 premiers caractères(par exemple)
 
Le problème est que le 100 ème caractère peut être contenu dans une balise html ,
 
Genre "<b> coucou </b>"
 
Si le dernier u est le 100 ème caractères, mon texte scindé ne pourra plus être interprété et je verrai le <b> s'afficher au lieu d'être interprété.
 
Connaissez vous un moyen (un script) de scinder ce texte proprement ,
 
Merci :jap:

Reply

Marsh Posté le 06-07-2010 à 14:47:37   

Reply

Marsh Posté le 06-07-2010 à 15:29:29    

Tes 100 caractères sont comptés à partir de la source ou du rendu ?

Reply

Marsh Posté le 06-07-2010 à 16:01:02    

avec strip_tags ;)  (si la mise en forme n'est pas importante pour les 100 caractères)

Message cité 1 fois
Message édité par stealth35 le 06-07-2010 à 16:01:56
Reply

Marsh Posté le 06-07-2010 à 16:21:49    

stealth35 a écrit :

avec strip_tags ;)  (si la mise en forme n'est pas importante pour les 100 caractères)


 
Il veut peut-être garder le code html...
 
Par contre, attention aux XSS... Assure-toi que le texte html est de source sûre...

Reply

Marsh Posté le 06-07-2010 à 16:23:05    

Pascal le nain a écrit :


 
Il veut peut-être garder le code html...
 
Par contre, attention aux XSS... Assure-toi que le texte html est de source sûre...


 
d'ou la petite condition après  ;)  

Reply

Marsh Posté le 06-07-2010 à 16:26:59    

sebondus, t'as un autre problème, c'est qu'il peut y avoir dans ton texte d'autres balises HTML ouvertes qui peuvent être fermées bien après les 100 caractères :/
A mon avis, faut que tu parses la chaîne contenant les 100 1er caractères et que tu relèves toutes les balises ouvertes qui n'ont pas été fermée et tu les ajoutes à la fin de tes 100 caractères. Mais bonjour le risque que la mise en page devienne n'importe quoi... On peut connaître le besoin initial?


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 06-07-2010 à 16:39:37    

Il y a un truc absolument anormal... c'est que tu aies besoin de bosser sur du code HTML ...
 
Tout ce qui est traitement doit être fait en dehors du code.
 
Il sort d'où ton texte à scinder ? Pourquoi il y a déjà du code HTML avant même que tu ne traite la chaine ? :??:


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 06-07-2010 à 16:44:04    

Je devine qu'il s'agit d'un extrait de 100 caractères d'un article par exemple...

Reply

Marsh Posté le 06-07-2010 à 16:46:44    

Reply

Marsh Posté le 06-07-2010 à 16:49:56    

Pascal le nain a écrit :

Je devine qu'il s'agit d'un extrait de 100 caractères d'un article par exemple...


 
Peu importe qu'il s'agisse d'un article, d'une news, d'un message de forum ou quoi que ce soit d'autre ... le fait est que dans la majorité des cas ce n'est pas normal d'avoir à traiter du code HTML...


---------------
Gamertag: CoteBlack YeLL
Reply

Marsh Posté le 06-07-2010 à 16:49:56   

Reply

Marsh Posté le 06-07-2010 à 16:50:00    


 
Vu le nombre de boucles imbriquées et de regexps, je conseille l'utilisation d'un fichier de cache :p
 

Dj YeLL a écrit :


 
Peu importe qu'il s'agisse d'un article, d'une news, d'un message de forum ou quoi que ce soit d'autre ... le fait est que dans la majorité des cas ce n'est pas normal d'avoir à traiter du code HTML...


 
Pafo.
Peut être qu'il récupère le code html d'un article sur un site web, et qu'il fait un extrait... Un peu comme facebook quand tu postes un lien...

Message cité 1 fois
Message édité par Pascal le nain le 06-07-2010 à 16:53:32
Reply

Marsh Posté le 06-07-2010 à 17:02:52    

Pascal le nain a écrit :


 
Vu le nombre de boucles imbriquées et de regexps, je conseille l'utilisation d'un fichier de cache :p
 


 
ouai ca pas l'air génial  :whistle:  

Reply

Marsh Posté le 07-07-2010 à 13:47:50    

En fait c'est un backoffice ou on peut entre la description d'un element, on peut y inclure des balises <p>, <b>, <a>, <i>, etc ... bref pour metttre un peu en forme le texte.
 
Le probleme est que je n'ai pas de deuxieme champ contenant  une description courte, d'ou mon besoin de scinder ce premier champ.

Reply

Marsh Posté le 07-07-2010 à 13:56:30    

Alisteroid a écrit :

En fait c'est un backoffice ou on peut entre la description d'un element, on peut y inclure des balises <p>, <b>, <a>, <i>, etc ... bref pour metttre un peu en forme le texte.
 
Le probleme est que je n'ai pas de deuxieme champ contenant  une description courte, d'ou mon besoin de scinder ce premier champ.


 
est ce important de la garder la mise en forme pour le résumé ?

Reply

Marsh Posté le 07-07-2010 à 14:28:00    

si c'est un lien hypertexte, ça serait dommage de perdre cette "mise en forme".
 
Sinon, l'autre solution, ça serait de modifier le backoffice pour rajouter un champ (si t'as accès au code source).


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 07-07-2010 à 22:24:31    

la solution est simple. il faut penser à utiliser le css au lieu de php pour ne pas avoir des balises ouvertes.
il suffit de mette le texte dans une div avec une langueur fixe et de lui attribuer la propriété overflow:hidden; pour que le texte qui dépasse la longueur n'apparait pas
 
<div style="height:200px;width:400px;overflow:hidden;">
ICI TEXTE
</div>

Reply

Marsh Posté le 08-07-2010 à 10:38:55    

J'y ai même pas pensé :D, bref je crois que je vais rajouter un champ dans le backoffice

Reply

Marsh Posté le 08-07-2010 à 15:35:39    

imed_bouzidi a écrit :

la solution est simple. il faut penser à utiliser le css au lieu de php pour ne pas avoir des balises ouvertes.
il suffit de mette le texte dans une div avec une langueur fixe et de lui attribuer la propriété overflow:hidden; pour que le texte qui dépasse la longueur n'apparait pas
 
<div style="height:200px;width:400px;overflow:hidden;">
ICI TEXTE
</div>


 [:everything4free]

Reply

Marsh Posté le 13-07-2010 à 13:06:33    

Je ne sais pas ce qui est bizarre dans la solution que j'ai proposé ! C'est simple, rapide et ça fonctionne  ;)

Reply

Marsh Posté le 13-07-2010 à 20:08:08    

ouais mais ô combien crade !
tu ne résous pas le problème, tu le contournes ...


---------------
NewsletTux - outil de mailing list en PHP MySQL
Reply

Marsh Posté le 14-07-2010 à 23:40:37    

Imagine que l'article fait 5 pages...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed