0

我到处寻找并用谷歌搜索/stackoverflown,但我找不到解决方案。请帮忙!

我正在将 jQuery 数据表与 columnFilter 插件一起用于 Ajax 源表。我正在尝试select使用选项实现过滤器multiple

问题是此选项包含特殊字符(中文、德文、日文、俄文等)。Now when the multipleoption is off. json 请求的处理没有任何问题(我得到了提交的确切字符,并使用它们来获取所需的数据库条目,其中包括所有这些语言的条目)。但是,当该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 回答