Nenhum resultado de pesquisa se filtrado por nome de usuário unicode

Encontrei um bug em que não consigo pesquisar postagens de um usuário por @+nome de usuário na caixa de pesquisa se o nome de usuário contiver unicode (por exemplo, chinês \\p{Han}).
O motivo é que a regex usada no seguinte código (em lib\\search.rb) corresponde apenas a caracteres ASCII.

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

Testei se adiciono allowed_unicode_username_characters na regex (ou seja, adicionando uma regra advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i)), funciona bem.

3 curtidas

Ótimo, sim, certamente queremos corrigir isso, permitimos que os administradores do site optem por nomes de usuário Unicode.

Você se importaria de tentar um PR? Devemos apenas alterar esse comportamento se o administrador do site optar por nomes de usuário Unicode.

2 curtidas

Eu uso um plugin para adicionar o advanced_filter com o seguinte código, e ele atende às minhas necessidades.

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

Mas não sei como modificar o core corretamente, especialmente quando allowed_unicode_username_characters é uma variável. Talvez uma solução simples, mas provavelmente errada, seja mudar advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) para advanced_filter(/^\\@(.+)$/i), como você fez em advanced_filter(/^user:(.+)$/i).

2 curtidas

Acho que um PR para o núcleo é o caminho a seguir aqui. É um bug no núcleo. Você precisaria adicionar um teste no PR.

2 curtidas

OK, acabei de fazer um PR e você pode dar uma olhada.

3 curtidas

Mesclado, obrigado pela sua contribuição!

3 curtidas

Este tópico foi fechado automaticamente 2 dias após a última resposta. Novas respostas não são mais permitidas.