0

私はどこでも調べてグーグル/スタックオーバーフローしましたが、解決策が見つかりません。助けてください!

Ajax ソースのテーブル用の columnFilter プラグインで jQuery データテーブルを使用しています。selectオプションでフィルターを実装しようとしていmultipleます。

問題は、これに対するオプションに特殊文字 (中国語、ドイツ語、日本語、ロシア語など) が含まれていることです。multipleオプションがオフの場合。json リクエストは問題なく処理されます (送信された正確な文字を取得し、それらを使用して、これらすべての言語のエントリを含む必要な db エントリを取得します)。ただし、multipleオプションがオンの場合、すべての特殊文字がエスケープされます。

基本的にオプション

「簡体字中国語(简体中文)」

json として処理されます

"中国語%20簡体字%20%28%u7B80%u4F53%u4E2D%u6587%29"

バックエンドでは、次のコードを使用しています。

.
.
.
    if params[:sSearch_2].present?

      langs = get_items_from_multiple(params[:sSearch_2])

      unless langs == []
        cards = cards.where(:language => langs)
      end

    end

.
.
.
  def get_items_from_multiple(request)
    require "cgi"

    itemList = request.match(/\^\((.+)\)\$/)   #Extract request from within ^( )$

    if itemList.nil?
      itemList = []
    else
      itemList = itemList[1].split("|")        #Split options
      escaped = []
      itemList.each do |item|
        escaped << CGI.unescape(item).gsub("\\", "") #trying to unescape
      end
      itemList = escaped
    end

    itemList

  end

これで、このCGI.unescape...部分は句読点のみをエスケープ解除します。次のような結果になります。

「簡体字中国語 (%u7B80%u4F53%u4E2D%u6587)」

エスケープされていない(申し訳ありませんが)漢字を残してください。

私が達成したいのは、完全にエスケープされていない文字列の配列をlangs次のクエリに渡すことです。

cards = cards.where(:language => langs)

それらはデータベースに記録されているため、選択したすべての言語でアイテムを取得します。

Ruby/Rails メソッドが見つかりません。そして、後者をエスケープせず%に前のものを に置き換える適切な方法を知りません (シームレスに. \"\u7B80""简"

何か案は?

4

1 に答える 1

0

割り当てましょう

str="Chinese%20Simplified%20%28%u7B80%u4F53%u4E2D%u6587%29"

new_str=Rack::Utils.parse_query(URI.unescape(str))

また

new_str=Rack::Utils.parse_query(Utils.unescape(str))

それが必要なことをすることを願っています。

于 2014-10-16T09:59:16.753 に答える