# Nessun risultato di ricerca se filtrato per nome utente unicode

**URL:** <https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349>\
**Category:** Bug\
**Created:** [31 Ottobre 2022, 5:16am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349 "2022-10-31T05:16:22Z")\
**Posts on this page:** 7\
**Page:** 1

<div class="post-metadata">

**Author:** ![topological](https://avatars.discourse-cdn.com/v4/letter/t/b487fb/32.png) [@topological](https://meta.discourse.org/u/topological)\
**Post date:** [31 Ottobre 2022, 5:16am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/1 "2022-10-31T05:16:23Z")

</div>

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.

```ruby
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.

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [31 Ottobre 2022, 5:19am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/2 "2022-10-31T05:19:20Z")

</div>

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.

---

<div class="post-metadata">

**Author:** ![topological](https://avatars.discourse-cdn.com/v4/letter/t/b487fb/32.png) [@topological](https://meta.discourse.org/u/topological)\
**Post date:** [31 Ottobre 2022, 7:34am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/3 "2022-10-31T07:34:56Z")

</div>

Utilizzo un plugin per aggiungere `advanced_filter` seguendo il codice seguente, e soddisfa le mie esigenze.

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

---

<div class="post-metadata">

**Author:** ![sam](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/sam/32/102149_2.png) [@sam](https://meta.discourse.org/u/sam)\
**Post date:** [31 Ottobre 2022, 8:05am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/4 "2022-10-31T08:05:12Z")

</div>

> [@topological](#):
>
> Ma non so come modificare il core correttamente, specialmente quando `allowed_unicode_username_characters` è una variabile.

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

---

<div class="post-metadata">

**Author:** ![topological](https://avatars.discourse-cdn.com/v4/letter/t/b487fb/32.png) [@topological](https://meta.discourse.org/u/topological)\
**Post date:** [31 Ottobre 2022, 8:59am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/5 "2022-10-31T08:59:09Z")

</div>

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

> <https://github.com/discourse/discourse/pull/18804>
>
> Fix the bug mentioned in https://meta.discourse.org/t/no-search-result-if-filter…ed-by-unicode-username/243349

---

<div class="post-metadata">

**Author:** ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)\
**Post date:** [16 Novembre 2022, 9:43am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/7 "2022-11-16T09:43:17Z")

</div>

Unito, grazie per il tuo contributo!

---

<div class="post-metadata">

**Author:** ![gerhard](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/gerhard/32/119479_2.png) [@gerhard](https://meta.discourse.org/u/gerhard)\
**Post date:** [18 Novembre 2022, 9:43am UTC](https://meta.discourse.org/t/no-search-result-if-filtered-by-unicode-username/243349/8 "2022-11-18T09:43:39Z")

</div>

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