Aucun résultat de recherche si filtré par nom d'utilisateur unicode

J’ai rencontré un bug qui m’empêche de rechercher les publications d’un utilisateur avec @+nomdutilisateur dans la boîte de recherche si le nom d’utilisateur contient des caractères Unicode (par exemple, des caractères chinois \\p{Han}).
La raison est que l’expression régulière utilisée dans le code suivant (dans lib\\search.rb) ne correspond qu’aux caractères ASCII.

advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) do |posts, match|

J’ai testé si j’ajoutais allowed_unicode_username_characters dans l’expression régulière (c’est-à-dire en ajoutant une règle advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i)), cela fonctionne correctement.

3 « J'aime »

Bien joué, oui, nous voulons certainement corriger cela, nous permettons aux administrateurs de site de choisir des noms d’utilisateur unicode.

Voulez-vous essayer une PR ? Nous devrions seulement modifier ce comportement si l’administrateur du site opte pour des noms d’utilisateur unicode.

2 « J'aime »

J’utilise un plugin pour ajouter le advanced_filter en utilisant le code suivant, et il répond à mes besoins.

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

Mais je ne sais pas comment modifier le cœur correctement, surtout quand allowed_unicode_username_characters est une variable. Peut-être qu’une solution simple mais probablement erronée est de changer advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) en advanced_filter(/^\\@(.+)$/i), comme vous l’avez fait dans advanced_filter(/^user:(.+)$/i).

2 « J'aime »

Je pense qu’une PR vers le cœur est la bonne solution ici. C’est un bug dans le cœur. Vous devrez cependant ajouter un test dans la PR.

2 « J'aime »

OK, j’ai fait une PR il y a juste un instant et vous pouvez y jeter un œil.

3 « J'aime »

Fusionné, merci pour votre contribution !

3 « J'aime »

Ce sujet a été automatiquement fermé 2 jours après la dernière réponse. Les nouvelles réponses ne sont plus autorisées.