diff --git a/app/models/artist.rb b/app/models/artist.rb index b9dee6791..2eff57b74 100644 --- a/app/models/artist.rb +++ b/app/models/artist.rb @@ -225,7 +225,8 @@ class Artist < ActiveRecord::Base def any_name_matches(name) stripped_name = normalize_name(name).to_escaped_for_sql_like - where("(name LIKE ? ESCAPE E'\\\\' OR other_names_index @@ to_tsquery('danbooru', ?))", stripped_name, normalize_name(name)) + name_for_tsquery = normalize_name(name).gsub(/\(/, "\\(").gsub(/\)/, "\\)") + where("(name LIKE ? ESCAPE E'\\\\' OR other_names_index @@ to_tsquery('danbooru', ?))", stripped_name, name_for_tsquery) end def search(params) diff --git a/config/initializers/core_extensions.rb b/config/initializers/core_extensions.rb index 88dfdbfdb..79cb8eb0d 100644 --- a/config/initializers/core_extensions.rb +++ b/config/initializers/core_extensions.rb @@ -2,7 +2,7 @@ module Danbooru module Extensions module String def to_escaped_for_sql_like - return self.gsub(/\\/, '\0\0').gsub(/%/, '\\%').gsub(/_/, '\\_').gsub(/\*/, '%') + return self.gsub(/\\/, '\0\0').gsub(/(%|_)/, '\\\\\\1').gsub(/_/, '\\_').gsub(/\*/, '%') end def to_escaped_js