Ho riscontrato un bug per cui non è possibile cercare i post di un utente tramite @+username nella casella di ricerca se lo username contiene caratteri unicode (ad esempio, caratteri cinesi \\p{Han}).
Il motivo è che l’espressione regolare utilizzata nel seguente codice (in lib\\search.rb) corrisponde solo a caratteri ASCII.
advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) do |posts, match|
Ho testato che aggiungendo allowed_unicode_username_characters nell’espressione regolare (ovvero, aggiungendo una regola advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i)), funziona correttamente.
Utilizzo un plugin per aggiungere advanced_filter seguendo il codice seguente, e soddisfa le mie esigenze.
if SiteSetting.unicode_usernames?
regexp = Regexp.new("(?i-mx:^\\@([a-zA-Z0-9_\\-#{SiteSetting.allowed_unicode_username_characters}]+)$)")
Search.advanced_filter(regexp) do |posts, match|
username = match.downcase
user_id = User.where(staged: false).where(username_lower: username).pluck_first(:id)
if !user_id && username == "me"
user_id = @guardian.user&.id
end
if user_id
posts.where("posts.user_id = #{user_id}")
else
posts.where("1 = 0")
end
end
end
Ma non so come modificare correttamente il core, specialmente quando allowed_unicode_username_characters è una variabile. Forse una soluzione semplice ma probabilmente errata è cambiare advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) in advanced_filter(/^\\@(.+)$/i), proprio come hai fatto in advanced_filter(/^user:(.+)$/i).