44 lines
931 B
Ruby
44 lines
931 B
Ruby
module ActiveRecord
|
|
class Base
|
|
def self.q(str)
|
|
ActiveRecord::Base.connection.quote(str)
|
|
end
|
|
|
|
def q(str)
|
|
ActiveRecord::Base.connection.quote(str)
|
|
end
|
|
end
|
|
end
|
|
|
|
class String
|
|
def forcibly_convert_to_utf8
|
|
begin
|
|
if self.encoding.to_s == "UTF-8" && self.valid_encoding?
|
|
return self
|
|
end
|
|
|
|
str = self.dup.force_encoding("binary").encode("utf-8",
|
|
:invalid => :replace, :undef => :replace, :replace => "?")
|
|
|
|
if !str.valid_encoding? || str.encoding.to_s != "UTF-8"
|
|
raise Encoding::UndefinedConversionError
|
|
end
|
|
|
|
rescue Encoding::UndefinedConversionError => e
|
|
str = self.chars.map{|c|
|
|
begin
|
|
c.encode("UTF-8", :invalid => :replace, :undef => :replace)
|
|
rescue
|
|
"?".encode("UTF-8")
|
|
end
|
|
}.join
|
|
|
|
if !str.valid_encoding?
|
|
raise "still bogus encoding"
|
|
end
|
|
end
|
|
|
|
str
|
|
end
|
|
end
|