Problème substr

WRInaute occasionnel
Bonjour,
je rencontre un probleme avec substr.
mon code :
Code:
<?php echo '<p>'.strip_tags(substr($result['info'], 0, 130)). '...</p>'; ?>

Sur mon site j'ai le texte suivant :

C'est un accident très rare de nos jours, au point d'en être suspect: dans la nuit de dimanche à lundi, à Chemisey, une petite commune de la plaine

Dans le code source il apparait donc comme ceci :

C'est un accident tr&egrave;s rare de nos jours, au point d'en &ecirc;tre suspect: dans la nuit de dimanche &agrave; lundi, &agrave; Chemisey, une petite commune de la plaine

Le probleme que je rencontre est que par exemple si je definit 130 caractères maxi j'aurai dans le cas ou on tombe sur un caractère accenté en fin des 130:
C'est un accident très rare de nos jours, au point d'en être suspect: dans la nuit de dimanche à lundi, &ag...

de meme, si au niveau du code source j'ai par exemple un lien avec les balises href... ces balise seront comtabilisées comme des caractères.

Existe-il un solution pour evité ces genres de bug ?
 
WRInaute discret
Bonjour fabrice,

Tu peux peut-être retirer les entités html qui posent problème dans les opérations de comptage/tronquage de texte, puis les remettre ensuite :

Code:
$texte="C'est un accident tr&egrave;s rare de nos jours, au point d'en &ecirc;tre suspect: dans la nuit de dimanche &agrave; lundi, &agrave; Chemisey, une petite commune de la plaine";
echo '<p>'.htmlentities(strip_tags(substr(html_entity_decode($texte), 0, 130))). '...</p>';

renverra par exemple :
Code:
<p>C'est un accident tr&egrave;s rare de nos jours, au point d'en &ecirc;tre suspect: dans la nuit de dimanche &agrave; lundi, &agrave; Chemisey, une petite com...</p>
 
WRInaute occasionnel
Bonjour,
merci ta solution fonctionne très bien. Depuis le temps que j'avais ce probleme et que j'essayai de trouvé une solution !
MERCI.
 
WRInaute accro
Le plus simple étant d'utiliser mb_substr et pas des html_entity_decode. ;-)

Code:
<?php echo '<p>'.strip_tags(mb_substr($result['info'], 0, 130, 'UTF-8')). '...</p>'; ?>

voir toutes les fonctions php fonctionnant en multi-octet (utf-8).
 
Discussions similaires
Haut