2

Rails3.2.3とRuby1.9.3を使用しています。タイトルと説明を受け入れるPostというモデルがあります。サイトのフロントエンドは、ajaxリクエストを通じてバックエンドから送信された情報を受け取ります。フォームに記入するとき、

title: foo
content: foobar

送信すると、フロントエンドから問題なくデータを表示できます。

ただし、たとえば、フォームからutf8以外のデータを送信する場合は常に、次のようになります。

title: foo
content: “foobar” 

フォームをレンダリングしようとすると、次のエラーが発生します。

ActionView::Template::Error (incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string))

私の.js.erbファイルは次のようになります。

$("#my_post").html('<%= escape_javascript(render :partial => 'post') %>');

これはエンコーディングの問題だと思いますが、最善の方法で処理する方法がわかりません。私はいくつかのオプションを考えました:

  1. iconvライブラリを使用して非utf8を削除します-これは、アプリケーション内のすべてのモデルに対してbefore_saveフィルターを介して行います
  2. ドキュメントにutf-8が含まれていることをjsの先頭で指定します(これが機能するかどうかはわかりません)
  3. 私のフォームで使用accept-charset="UTF-8"して、ブラウザにutf-8以外のコンテンツの送信を回避するように強制します。

これらのソリューションが役立つかどうかさえわかりません。これを行うための最も効率的な方法は次のとおりです。ありがとう!

4

2 に答える 2

0

フォームに追加するという質問に言及しているため、フォームヘルパーを使用していないと思われますaccept-charset="UTF-8"

フォームヘルパーは、accept-charset属性とsnowmanパラメーターを追加します。これにより、ブラウザーからUTF-8データを確実に取得できるようになります。

Railsフォームヘルパーガイドを参照してください。

于 2012-05-29T03:14:19.620 に答える
0

かどうかを注意深く調べる必要があります。

  • UTF-8 以外のデータを実際にアプリに送信している、または
  • UTF-8 データを送信していますが、Ruby/Rails で認識されません

それが何であるかを確認するには、「ワイヤー」上のデータを調べる必要があります。(インターネット上で送信されているもの。) Wiresharkなどのピーク ツールまたはFiddlerなどのプロキシ スパイを使用します。

カーリー クォートは、8859 または UTF-8 を使用して送信できます。

推奨事項HTML ページを UTF-8 に設定する必要があります。ページ上のスクリプトから送信される Ajax もすべて UTF-8 を使用する必要があります。http://www.utf8.com/を参照

追加(Re: Rails がフォームの文字エンコーディングを設定する方法についてのコメント)

Ajax 文字エンコーディングの問題は、ページのエンコーディング セットがどのようになっていたかです。ブログ投稿。そのため、必ずページ テンプレートでページの UTF-8 エンコーディングを設定してください。

于 2012-05-29T02:41:49.070 に答える