私はどこでも調べてグーグル/スタックオーバーフローしましたが、解決策が見つかりません。助けてください!
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"
"简"
何か案は?