我正在使用 ruby 1.9.3 和 mongoid 作为我的ORM处理 rails 3.1 应用。我正面临一个恼人的问题。我想截断这样一篇文章的内容:
<%= raw truncate(strip_tags(post.content), :length => 200) %>
我正在使用raw
和strip_tags
,因为我的post.content
实际上是使用富文本编辑器处理的。
我对非ASCII字符存在严重问题。想象一下,我的帖子内容如下:
éééé éééé éééé éééé éééé éééé éééé éééé
我上面以天真的方式做的是:
éééé éééé éééé éééé éééé &eac...
看起来truncate正在查看字符串中的每个单词,如é&eactute;éé
。
有没有办法:
我问这个问题,因为到目前为止我还没有找到任何解决方案。这是我的应用程序中唯一一个有这种角色问题的地方,这是一个主要问题,因为网站的整个内容都是法语,所以包含了很多é, ç, à, ù
。
另外,我认为这种行为对truncate
助手来说非常不幸,因为在我的情况下它根本不会截断200个字符,而是大约25个字符!
答案 0 :(得分:2)
可能为时已晚,无法帮助解决您的问题,但...... 您可以使用ActiveSupport :: Multibyte :: Chars限制方法,如下所示:
post.content.mb_chars.limit(200).to_s
请参阅http://api.rubyonrails.org/v3.1.1/classes/ActiveSupport/Multibyte/Chars.html#method-i-limit
我遇到了一个非常类似的问题(截断不同语言的字符串),这适用于我的情况。这是在确保编码在任何地方都设置为UTF-8之后:rails config,数据库配置和/或数据库表定义,以及任何html模板。
答案 1 :(得分:1)
如果您的字符串是HTML,那么我建议您查看truncate_html gem。我没有将它用于这样的字符,但它应该知道它可以安全截断字符串的位置。
答案 2 :(得分:0)
有一种简单的方法,但不是一个好的解决方案。首先,您必须确保您保存的内容是UTF-8。这可能没有必要。
content = "éééé"
post.content = content.force_encoding('utf-8') unless content.encoding.to_s = "UTF-8"
然后,当你阅读它时,你可以阅读强制它
<%= raw truncate(strip_tags(post.content.force_encoding('utf-8')), :length => 200) %>
答案 3 :(得分:0)
我写了strings来帮助截断,对齐,包装多字节文本,不支持空白语言(日语,中文等...)
Strings.truncate('ラドクリフ、マラソン五輪代表に1万m出場にも含み', 12)
# => "ラドクリフ…"