8
votes

Chaîne de texte limite PHP n'incluant pas les balises HTML?

Voici ce qui ne fonctionne pas pour moi: xxx

Je souhaite limiter le texte visible à 100 caractères, mais utiliser substr () y compris le non- Texte visible dans la limite ( et ) qui prend 41 de celles disponibles 100 Caractères.

Existe-t-il un moyen de limiter le texte de sorte que le mot "prise" de la liaison soit inclus dans la limite, mais pas ou ?

EDIT: Je veux garder le lien dans la chaîne, je ne compte tout simplement pas que la longueur de la limite ..


0 commentaires

5 Réponses :


2
votes

Si vous souhaitez limiter la partie de texte, vous devez l'analyser et vérifier la limite vous-même. Le moyen le plus simple est de:

if ( strlen(strip_tags($string)) > 100 )
{
    // the url inside $url is too big
}
else
{
    // the url inside $url fits
}


1 commentaires

N'oubliez pas de remplacer Strlen avec mb_strlen si le texte est multibyte.



2
votes

pas facilement - vous pouvez bien sûr utiliser strip_tags pour déshydrater la chaîne, mais autre que qu'il n'y a pas de solution facile.


1 commentaires

Solution à mon problème! Merci :)



3
votes

Le moyen le plus simple serait de l'analyser dans une structure DOM. Vous pouvez utiliser Domdocument pour cela. Ensuite, vous pourriez simplement passer à travers les éléments et apporter des modifications au contenu.

Une autre approche serait de faire une recherche à deux contacts de regex et de remplacer - d'abord utiliser la regex pour trouver le contenu des balises, puis utilisez la regex pour remplacer le contenu avec le contenu raccourci. Cela peut être atteint avec vos fonctions Preg_ * * habituelles.


0 commentaires

5
votes

Une fonction pour tronquer des mots dans le code HTML: xxx

source: http://snippets.dzone.com/posts/show/7125


1 commentaires

1
votes

Vous pouvez essayer cela, travaillé pour moi si aucune balises ne sont dans String $ Différuler aura une valeur de 0 donnant à la chaîne de votre valeur d'origine de 100

  <?php
$string = 'I have a dog and his name is <a href="http://www.jackismydog.com">Jack</a> and I love him very much because he\'s my favorite dog in the whole wide world and nothing could make me not love him, I think.';

$stringall=strlen($string);
$striphtml = strip_tags($string);
$stringnohtml=strlen(striphtml);
$differ=($stringall-$stringnohtml);
$stringsize=($differ + 100);
$limited = substr($string, 0, $stringsize).'...';
echo $limited;
?>


1 commentaires

$ stringnohtml = strylen (striphtml); devrait être $ stringnohtml = strylen ($ striphtml);