Chaine de caractère et HTML

Chaine de caractère et HTML - PHP - Programmation

Marsh Posté le 20-11-2009 à 12:34:36    

Bonjour à tous.
 
Je suis en train de mettre au poin un petit outil de résumé automatique sur un site existant.
Les articles sont stockés dans la base de donnée en html donc il y a de partout des <p> des <span> des &eacute; ...
 
J'ai décidé arbitrairement de coupé le texte au 160 premiers caractères ou au mot d'avant mais mon script est capable de coupé des mots de ce genre
mati&ea au lieu de couper au mot d'avant "matière".
 
On ma lancer une piste de dévellopement mais je ne sais pas comment la traiter.
En gros on m'a dit de chercher à a chaque caractère accentué en html, d'aller à la lettre en dur plus loin...
 
Auriez vous une idée ou une solution à mon problème ?
 
Le code :
 

Code :
  1. <? if(strlen($row['10'])>=$max){
  2.    $texte=substr($row['10'],0,$max) . "..." ;
  3.    echo "<div class='intro'>".$texte."</div>"; ?>

Reply

Marsh Posté le 20-11-2009 à 12:34:36   

Reply

Marsh Posté le 20-11-2009 à 13:19:58    

mais normalement tu devrais pas avoir de &eacute si ta prise en chage de l'encodage était bien faites.
 
si a une epoque j'avais un truc du style, qui trouvais le premiere espace disponible avant le 160 caratere et je coupais a ce moment la

Reply

Marsh Posté le 20-11-2009 à 14:04:25    

Je n'ai pas bien compris ton message.
 
Le site est en encodage utf-8 d'ou les &eacute et compagnie...

Reply

Marsh Posté le 20-11-2009 à 14:07:37    

si ton site a une en tete  ut8 et que ton fichier html est en utf8, dans cas la ta pas besion de faire &eacute.

Reply

Marsh Posté le 20-11-2009 à 14:10:40    

L'entête HTML est en Utf-8. Les données affichés sont toutes stockés dans une bdd en html d'ou mon problème.
 
Pour les suggestions du genre changer l'encodage du site, ou le fonctionnement, ce n'est pas envisagé.

Reply

Marsh Posté le 20-11-2009 à 14:13:24    

une base de donnée en html ?
 
sinon ducoup t'en pense quoi de la solution de l'espace pour le coupage des chaine ?

Reply

Marsh Posté le 20-11-2009 à 14:16:28    

Elle me parait intéréssante mais je ne sais pas comment la mettre en place avec ça
 
$texte=substr($row['10'],0,$max) . "..." ;
 

Reply

Marsh Posté le 20-11-2009 à 14:26:43    

$text = substr($s, 0, strrpos(substr($s, 0, 165), ' '));

Reply

Marsh Posté le 20-11-2009 à 15:51:13    

Merci de ton aide sa a l'air de fonctionner mais par contre maintenant cela me coupe des mots...

Reply

Marsh Posté le 20-11-2009 à 16:06:51    

ah,t'as un exemple ?
 
normalement la ce que je fait,
je prend ta chaine de 160 caractère, je cherche le dernier espace, et je tronque la chaine principal a partir de la. ce que ferai que techniquement t'aura toujours moins de 160, et tout dépens du dernier mot (5-6 lettres en moyenne)

Reply

Marsh Posté le 20-11-2009 à 16:06:51   

Reply

Marsh Posté le 20-11-2009 à 16:10:50    

Oui tu as raison, c'est moi qui est à coté de la plaque en ce vendredi soir, vu que je rajoute les ... directement à la fin de la chaine de caractèe j'ai cru voir des mots coupés mais non ...
 
Merci encore de ton aide ;)
 
 
PS: J'ai horreur du traitement des chaines de caractère en PHP :p

Reply

Marsh Posté le 20-11-2009 à 18:40:45    

J'avais écrit une petite fonction pour ça, une fois, tu peux t'en inspirer...
 

Code :
  1. /*
  2.  * ExtractText displays some characters of a whole text
  3.  * input $text, the whole text {string}
  4.  * input $max_char, number max of characted for a small text {int}
  5.  *
  6.  * @returns {string}
  7.  */
  8. function ExtractText($text,$max_char)
  9. {
  10.  // Test if length > limit
  11.  if (strlen($text)>$max_char)
  12.  {
  13.   // Select maximum chars
  14.   $text = substr($text, 0, $max_char);
  15.   // Retrieving last whitespace position (no truncate word)
  16.   $position_space = strrpos($text, " " );
  17.   $text = substr($text, 0, $position_space);
  18.   // Adding "..."
  19.   $text = $text." [...]";
  20.  }
  21.  return $text;
  22. };


 
en paramètres : $text ton texte, $max_chars ton 160...


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

Sujets relatifs:

Leave a Replay

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