Rails 无法参数化西里尔字符(俄语)

Posted

技术标签:

【中文标题】Rails 无法参数化西里尔字符(俄语)【英文标题】:Rails Cannot Parameterize Cyrillic Characters (Russian) 【发布时间】:2011-10-12 17:57:52 【问题描述】:

我们的应用程序使用页面名称的参数化版本自动生成页面 URL。例如:

http://www.domainname.com/this-is-the-page-name

简单。工作正常,除了页面名称使用西里尔字符时,参数化方法返回一个空白字符串:

"Пробна галерия".parameterize

我一直在网上研究如何处理这个问题,我发现的建议指向音译技术。想知道是否有一种简单直接的方法来处理这个问题。

【问题讨论】:

【参考方案1】:

尝试使用 gsub:

irb> "Пробна галерия".gsub!(/\s/,'-')
  => "Пробна-галерия" 

【讨论】:

我们对西里尔字符没有太多经验,但如果可能的话,我宁愿显示字符串的罗马化版本,除非有人可以确认在地址栏中显示西里尔字符是标准的。其次,parameterize 可以很好地清理我们的输出字符串,其中 gsub 解决方案过于简单。 然后尝试 gem russian >重载方法参数化变形器 ActiveSupport (String#parameterize)。现在它是俄语字母的罗马化。【参考方案2】:

试试这个:

def to_slug      
  # http://***.com/questions/1302022/best-way-to-generate-slugs-human-readable-ids-in-rails

  #strip the string
   ret = self.strip

   #replace all whitespaces and underscores to dashes
   ret.gsub!(/[\s_]+/, '-')

   #replace all non alphanumeric, non dashes with empty string
   ret.gsub! /\s*[^A-Za-z0-9А-Яа-я\-]\s*/, ''

   #convert double dashes to single
   ret.gsub! /-+/,"-"

   #strip off leading/trailing dashes
   ret.gsub! /\A[-]+|[-]+\z/,""

   ret
end

【讨论】:

以上是关于Rails 无法参数化西里尔字符(俄语)的主要内容,如果未能解决你的问题,请参考以下文章

西里尔字 俄语

如何在 Visual Studio C++ 中将西里尔文(俄语)字符输出到控制台?

rails命令参数化查询

python-参数化-(excel中特殊标识字符替换数据)

支持 BigQuery 中的西里尔文数据

SQLite插入 - 如何使用参数化值避免语法错误时插入任何文本