Est-il sans danger de HTML tronquer la méthode dans les Rails?
J'ai une chaîne de HTML dans les Rails. Je tiens à tronquer la chaîne après un certain nombre de caractères qui ne sont pas y compris le balisage HTML. Aussi, si la division se trouve à tomber au milieu de l'ouverture et de la fermeture de la balise, je voudrais fermer la balise d'ouverture/s. Par exemple;
html = "123<a href='#'>456</a>7890"
truncate_markup(html, :length => 5) --> "123<a href='#'>45</a>"
Vous devez vous connecter pour publier un commentaire.
Il y a deux choses complètement différentes solutions à la fois avec le même nom:
truncate_html
hgmnz/truncate_html
supprime les caractères spéciaux. Le codetruncate_html('<p>aàáâäæãåāeèéêëēėęiîïíīįìoôöòóœøōõuûüùúū</p>', :length => 10)
a une sortie attendue de<p>aàáâäæãåāe</p>
mais retourne<p>aeiou</p>
.la régulière
truncate
fonction fonctionne très bien, il suffit de passer:escape => false
comme une option pour garder le HTML intacte. par exemple:RubyOnRails.org
*Modifier je n'ai pas lu la question de très près (ou à tous les TBH), de sorte que cette réponse ne résout pas cette question... C'EST la réponse que j'ai arrivé à la recherche de bien, donc j'espère que cela aide 1 ou 2 personnes 🙂
Vous devez résoudre ce problème avec CSS plutôt que des Rubis. Vous faites quelque chose qui affecte les DOM mise en page, et il n'existe aucun moyen de programmation pour concevoir une solution qui fonctionne de manière cohérente.
Disons que vous obtenez votre code HTML parser du gem de travail, et de vous trouver un plus petit dénominateur commun le nombre de caractères qui fonctionne la plupart du temps.
Qu'advient-il si vous changez de taille de police, ou de votre mise en page du site? Vous devrez recalculer le nombre de caractères à nouveau.
Ou disons que votre html a quelque chose comme ça:
<p><br /></p><br />
zéro caractères, cependant, il serait la cause d'un gros morceau de texte vide pour être inséré. Il pourrait même être un<blockquote>
ou<code>
tag avec trop de rembourrage ou de la marge de jeter votre mise en page totalement hors de contrôle.Ou l'inverse, disons que vous avez ce
3 ≅ λ
(3 sur λ) Qui est de 26 caractères, mais à des fins d'affichage, il n'est que de 5.Le point étant que le nombre de caractères vous dit rien sur la manière dont quelque chose s'affiche dans le navigateur. Ne pas mentionner le fait HTML analyseurs sont lourde les morceaux de code qui peut parfois être peu fiables.
Voici quelques bonnes CSS pour faire face. L' :après la pseudo-classe d'ajouter un blanc fondu à la dernière ligne de contenu. Très belle transition.
Vous pouvez ajouter autant de
.lines-x
classes que vous voyez l'ajustement. J'ai utilisé em, mais px est tout aussi bon.Ensuite l'appliquer à votre élément:
<div class="truncate lines-3">....lots of stuff.. </div>
et le violon: http://jsfiddle.net/ke87h/
Vous pouvez utiliser le truncate_html plugin pour cela. Il utilise nokogiri et htmlentities gemmes et fait exactement ce que le plugin nom l'indique.
Cela vous aidera sans aucun effort supplémentaire
sanitize(sanitize("my text <em>with html</em>", tags: ['h1']).truncate(150))
la première désinfecter permettra de compléter le manque de balisage, à l'intérieur de désinfecter va supprimer mon indésirables des balises et de tronquer sur la fin sera tronquée, comme un html_safe, merciNous avons eu ce besoin dans zendone.com. Le problème était que les solutions existantes ont été très lents en tronquant long des documents HTML (MBs) en plus courts (KBs). J'ai fini le codage d'une bibliothèque basée à Nokogiri appelé truncato. La bibliothèque comprend quelques repères en comparant ses performances avec les autres libs.
Vous pouvez utiliser
strip_tags
de l'aide pour ce faire.On peut le faire avec l'aide de simple_format http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-simple_format
=> "123 Quatre cent cinquante six 7890"
La résolution de ce problème par le côté client:
vue:
css