1

私は、ORMとしてruby1.9.3mongoidを使用するrails3.1アプリに取り組んでいます。私は厄介な問題に直面しています。投稿の内容を次のように切り捨てたいと思います。

<%= raw truncate(strip_tags(post.content), :length => 200) %>

私が使用rawしているのは、実際にはリッチテキストエディタで処理されているstrip_tagsためです。post.content

非ASCII文字に深刻な問題があります。私の投稿内容が次のようになっていると想像してください。

éééé éééé éééé éééé éééé éééé éééé éééé

私が上で素朴な方法でやっていることはこれをします:

éééé éééé éééé éééé éééé &eac... 

切り捨ては、のような文字列のすべての単語を表示しているように見えます&eacute;&eactute;&eacute;&eacute;

次のいずれかの方法はありますか?

  1. 切り捨てで実際のUTF-8文字列を処理しますか?ここで、「é」は単一の文字を表しますか?それが私のお気に入りのアプローチです。
  2. 上記の命令をハックして、結果がより良くなるようにします。たとえば、レールを2ワード間で切り捨てます。

私は今のところ解決策を見つけていないので、この質問をしています。これは私のアプリでそのようなキャラクターに問題がある唯一の場所です。ウェブサイトのコンテンツ全体がフランス語であるため、これは大きな問題であり、多くのが含まれていますé, ç, à, ù

また、この動作はヘルパーにとって非常に残念なことだと思います。truncate私の場合、200文字ではなく、約25文字が切り捨てられるからです。

4

4 に答える 4

3

おそらく遅すぎて問題を解決できませんが... ActiveSupport::Multibyte::Chars limit メソッドを次のように使用できます。

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 構成、データベース構成および/またはデータベース テーブル定義、およびすべての html テンプレート。

于 2013-09-06T19:33:13.810 に答える
1

文字列が HTML の場合は、truncate_html gem を確認することをお勧めします。このような文字で使用したことはありませんが、文字列を安全に切り捨てることができる場所を認識している必要があります。

于 2012-02-09T10:11:34.020 に答える
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) %>
于 2012-02-10T14:22:25.303 に答える