Kein Suchergebnis bei Filterung nach Unicode-Benutzernamen

Ich bin auf einen Fehler gestoßen, bei dem ich die Beiträge eines Benutzers nicht über das Suchfeld mit @+Benutzername suchen kann, wenn der Benutzername Unicode (z. B. Chinesisch \\p{Han}) enthält.
Der Grund dafür ist, dass der reguläre Ausdruck, der im folgenden Code (in lib\\search.rb) verwendet wird, nur ASCII-Zeichen abgleicht.

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

Ich habe getestet, ob ich allowed_unicode_username_characters in den regulären Ausdruck einfüge (d. h. eine Regel advanced_filter(/^\\@([a-zA-Z0-9_\\-.\\p{Han}]+)$/i) hinzufüge), und es funktioniert einwandfrei.

3 „Gefällt mir“

Gut gemacht, ja, wir wollen das auf jeden Fall beheben. Wir erlauben Site-Administratoren, sich für Unicode-Benutzernamen zu entscheiden.

Möchten Sie einen PR ausprobieren? Wir sollten dieses Verhalten nur ändern, wenn sich der Site-Administrator für Unicode-Benutzernamen entscheidet.

2 „Gefällt mir“

Ich verwende ein Plugin, um den advanced_filter mit dem folgenden Code hinzuzufügen, und es erfüllt meine Bedürfnisse.

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

Aber ich weiß nicht, wie ich den Kern richtig modifizieren kann, besonders wenn allowed_unicode_username_characters eine Variable ist. Vielleicht ist eine einfache, aber wahrscheinlich falsche Lösung, advanced_filter(/^\\@([a-zA-Z0-9_\\-.]+)$/i) zu advanced_filter(/^\\@(.+)$/i) zu ändern, so wie Sie es in advanced_filter(/^user:(.+)$/i) getan haben.

2 „Gefällt mir“

Ich denke, ein PR für den Kern ist hier der richtige Weg. Es ist ein Fehler im Kern. Sie müssten jedoch einen Test im PR hinzufügen.

2 „Gefällt mir“

OK, ich habe gerade einen PR erstellt und du kannst ihn dir ansehen.

3 „Gefällt mir“

Zusammengeführt, vielen Dank für Ihren Beitrag!

3 „Gefällt mir“

Dieses Thema wurde automatisch 2 Tage nach der letzten Antwort geschlossen. Neue Antworten sind nicht mehr möglich.