No hay resultados de búsqueda si se filtra por nombre de usuario unicode

He encontrado un error por el cual no puedo buscar las publicaciones de un usuario con @+nombredeusuario en el cuadro de búsqueda si el nombre de usuario contiene caracteres unicode (por ejemplo, \\p{Han} en chino).
La razón es que la expresión regular utilizada en el siguiente código (en lib\\search.rb) solo coincide con caracteres ascii.

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

Probé que si agrego allowed_unicode_username_characters en la expresión regular (es decir, agregando una regla advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i)), funciona bien.

3 Me gusta

Bien hecho, sí, ciertamente queremos solucionar esto, permitimos que los administradores del sitio opten por nombres de usuario unicode.

¿Te importaría probar una PR? Solo deberíamos modificar este comportamiento si el administrador del sitio opta por nombres de usuario unicode.

2 Me gusta

Utilizo un plugin para añadir el advanced_filter con el siguiente código, y satisface mis necesidades.

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

Pero no sé cómo modificar el núcleo correctamente, especialmente cuando allowed_unicode_username_characters es una variable. Quizás una solución simple pero probablemente incorrecta sea cambiar advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) por advanced_filter(/^\\@(.+)$/i), tal como lo hiciste en advanced_filter(/^user:(.+)$/i).

2 Me gusta

Creo que una PR al núcleo es el camino a seguir aquí. Es un error en el núcleo. Sin embargo, necesitarías añadir una prueba en la PR.

2 Me gusta

OK, acabo de hacer una PR y puedes echarle un vistazo.

3 Me gusta

¡Fusionado, gracias por tu contribución!

3 Me gusta

Este tema se cerró automáticamente 2 días después de la última respuesta. Ya no se permiten nuevas respuestas.