Nessun risultato di ricerca se filtrato per nome utente unicode

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.

3 Mi Piace

Ottimo, sì, vogliamo certamente risolvere questo problema, consentiamo agli amministratori del sito di scegliere nomi utente unicode.

Ti andrebbe di provare una PR? Dovremmo modificare questo comportamento solo se l’amministratore del sito sceglie nomi utente unicode.

2 Mi Piace

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).

2 Mi Piace

Penso che una PR al core sia la strada da percorrere qui. È un bug nel core. Dovresti aggiungere un test nella PR.

2 Mi Piace

OK, ho appena creato una PR e puoi darle un’occhiata.

3 Mi Piace

Unito, grazie per il tuo contributo!

3 Mi Piace

Questo argomento è stato chiuso automaticamente 2 giorni dopo l’ultima risposta. Non sono più consentite nuove risposte.