2012-05-29 20 views
2

我使用的是Rails 3.2.3和Ruby 1.9.3。 我有一個名爲Post的模型,它接受一個標題和一個描述。 網站的前端通過ajax請求接收通過後端提交的信息。當我填寫與形式,讓我們說在Rails 3表單中處理非utf-8數據提交的最佳方式是什麼?

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. 剔除非UTF8使用的iconv庫 - 爲每一個模型通過before_save過濾器爲此在我的應用程序
  2. Specifying at the top of the js文檔包含UTF8(不確定這會起作用)
  3. 在我的表單中使用accept-charset="UTF-8"強制瀏覽器避免提交非utf-8內容。

我甚至不確定這些解決方案會有幫助,而最有效的方法是做到這一點。 謝謝!

+0

的'form_tag'視圖助手將增加'接收字符= 「UTF-8」'你。任何你不能使用'form_tag'的理由? –

回答

0

你需要仔細看看,看看

  • 你實際上發送非UTF-8的數據到你的應用程序,或
  • 你發送UTF-8的數據,但它不是被Ruby/Rails識別

要查看它是哪個,您需要檢查「線」上的數據。 (互聯網上發送的內容)使用偷窺工具,如Wireshark或代理間諜,如Fiddler

可以使用8859或UTF-8發送捲曲引號。

推薦您應該將HTML頁面設置爲UTF-8。然後,從頁面上的腳本發送的任何Ajax也應該使用UTF-8。見http://www.utf8.com/

新增(回覆:關於如何Rails的設置形式的字符編碼評論)

阿賈克斯字符編碼的問題是如何是頁的編碼集。 A blog post.所以一定要在頁面模板中設置頁面的UTF-8編碼。

+0

默認情況下,Rails將字符集設置爲UTF-8。 –

+0

@GabeKopley - 這只是設置表單的編碼。它對Ajax調用沒有影響。 –

+0

鏈接的博客文章作者想要ISO-8859-15字符集中的他的頁面。你不需要爲UTF-8做這件事,這是Rails的默認設置。 –

0

我懷疑你沒有使用表單助手,因爲你提到了在表單中添加accept-charset="UTF-8"的問題。

表單助手將添加accept-charset屬性以及snowman parameter,它們一起應確保您從瀏覽器獲取UTF-8數據。

請參閱Rails Form helpers指南。

相關問題