# Ancoragem não funciona ao usar caracteres não latinos em títulos

**URL:** https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597
**Category:** Bug
**Tags:** disco-toc
**Created:** [25 Agosto , 2023 03:42 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597 "2023-08-25T03:42:36Z")
**Posts on this page:** 6
**Page:** 1

<div class="post-metadata">

### Author: ![Ellery](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ellery/32/315016_2.png) [@Ellery](https://meta.discourse.org/u/Ellery)
#### Post date: [25 Agosto , 2023 03:42 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597/1 "2023-08-25T03:42:36Z")

</div>

Acredito ter encontrado um problema potencial ao usar o recurso de índice gerado automaticamente no DiscoTOC:

Ao utilizar títulos de vários níveis em idiomas que não o inglês, como o chinês, parece que os IDs `data-d-toc` no índice gerado automaticamente _ **capturam apenas dígitos numéricos e letras em inglês dos títulos** _. Essa situação pode resultar na criação de IDs idênticos com bastante facilidade, levando subsequentemente a links incorretos na barra de rolagem do lado direito.

 ![image](https://global.discourse-cdn.com/meta/original/4X/d/f/b/dfba634fad035e6b5894cb9894241e77fcd4c753.png)

Na imagem acima, se os números de série nos títulos forem ambos `5`, os IDs `data-d-toc` resultantes serão ambos `toc-h2-5`. Consequentemente, isso levará dois links distintos a direcionar erroneamente para a mesma seção.

No entanto, ao modificar os números de série para `1.5` e `2.5`, os IDs `data-d-toc` serão diferentes (`toc-h2-15` e `toc-h2-25`), garantindo efetivamente links precisos e apropriados.

Para garantir a vinculação precisa dentro da barra de rolagem, é aconselhável manter os títulos em inglês?

Além disso, para idiomas como o chinês, a solução mais viável envolveria a incorporação de números de série de vários níveis (por exemplo, `3.5`, `3.6.5`, `4.2.5.6`) aos títulos?

Referência:

> [@Having identical titles leads to identical ids and anchors](https://meta.discourse.org/t/having-identical-titles-leads-to-identical-ids-and-anchors/270649):
>
> Hi, I discovered a bug (?) or technical limitation. the links of the TOC as well as the highlighting when scrolling down don’t work properly if the headings have the same name. i guess it is because not a unique ID is generated but the ID is only the heading’s name. in my case the TOC looks like this - coming from an educational background the structure is always the same for our learning units, e.g. H1 - Overview H1 - 0:00 \> 0:15 - Plenary and Introduction H2 - Aim H2 - Content H2 - Method …

---

<div class="post-metadata">

### Author: ![Lhc\_fl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lhc_fl/32/268115_2.png) [@Lhc\_fl](https://meta.discourse.org/u/Lhc_fl)
#### Post date: [25 Agosto , 2023 03:46 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597/2 "2023-08-25T03:46:56Z")

</div>

Eu já mencionei esse problema e também fiz um fork de uma cópia

[https://meta.discourse.org/t/discotoc-automatic-table-of-contents/111143/399?u=lhc\_fl](https://meta.discourse.org/t/discotoc-automatic-table-of-contents/111143/399?u=lhc_fl)

No entanto, embora esteja funcionando, não está perfeito, mas estou com preguiça de mudar o código.

Obviamente, uma solução melhor é usar base64 para gerar data-d-toc e adicionar um identificador exclusivo para evitar possíveis títulos duplicados.

---

<div class="post-metadata">

### Author: ![Ellery](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ellery/32/315016_2.png) [@Ellery](https://meta.discourse.org/u/Ellery)
#### Post date: [25 Agosto , 2023 05:22 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597/3 "2023-08-25T05:22:49Z")

</div>

Eu não tenho autoridade para fazer tais alterações no fórum da minha empresa no momento, mas agradeço sua resposta!

Além disso, gostaria de perguntar se a equipe oficial considerou incorporar suporte para outros idiomas não latinos em relação a esta tabela de conteúdo gerada automaticamente em futuras versões do componente DiscoTOC? @Lilly @awesomerobot

Mais uma vez, obrigado a todos!

---

<div class="post-metadata">

### Author: ![Lhc\_fl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lhc_fl/32/268115_2.png) [@Lhc\_fl](https://meta.discourse.org/u/Lhc_fl)
#### Post date: [25 Agosto , 2023 05:27 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597/4 "2023-08-25T05:27:18Z")

</div>

Na verdade, eles levaram em consideração idiomas não latinos, utilizando o método `slugify(h.textContent)`. Suspeito que essa função `slugify` foi desenvolvida de acordo com o `slug generation method` do fórum. Quando não está no modo ‘encode’, problemas tendem a surgir, embora eu não tenha testado pessoalmente essa hipótese.

Em instâncias anteriores, quando usamos a versão oficial do componente de tema, o `slug generation method` do nosso fórum foi definido como ‘none’, o que deu origem a problemas semelhantes. Posso, portanto, sugerir que você tente alterar a configuração para ‘encode’?

Além disso, considerando a velocidade de correção de componentes pela equipe oficial… Em um componente vizinho, uma questão que levantei no ano passado ainda não teve solução, então sugiro que você solicite o uso da minha versão fork.

---

<div class="post-metadata">

### Author: ![Ellery](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/ellery/32/315016_2.png) [@Ellery](https://meta.discourse.org/u/Ellery)
#### Post date: [25 Agosto , 2023 05:47 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597/5 "2023-08-25T05:47:02Z")

</div>

Tentei modificar essa configuração, mas os problemas mencionados anteriormente ainda persistem. O ID `data-d-toc` só pode _ **ler números e letras** _, e ainda há instâncias de IDs de índice duplicados. Acho que o cerne da questão está em outro lugar?

 ![image](https://global.discourse-cdn.com/meta/original/4X/b/2/9/b29c4ef569b4ed286ad2a0eba6db5a2431cc4787.png)

Vou perguntar ao meu líder, obrigado pela resposta~

---

<div class="post-metadata">

### Author: ![Lhc\_fl](https://sea3.discourse-cdn.com/meta/user_avatar/meta.discourse.org/lhc_fl/32/268115_2.png) [@Lhc\_fl](https://meta.discourse.org/u/Lhc_fl)
#### Post date: [26 Agosto , 2023 03:49 UTC](https://meta.discourse.org/t/anchoring-not-working-when-using-non-latin-characters-in-headings/276597/6 "2023-08-26T03:49:47Z")

</div>

Atualização: Atualizei o código hoje. O sufixo agora é gerado por índice:

Esta melhoria resolve o problema de caracteres não latinos ou o mesmo nome de título gerarem a mesma âncora

```c++
const suffix = `${slugify(h.textContent)}-${post?.post_number}-${index}`;

```

> **[GitHub - Lhcfl/DiscoTOC-edited: Edited DiscourseTOC, supports non-latin language...](https://github.com/Lhcfl/DiscoTOC-edited)**
>
> Edited DiscourseTOC, supports non-latin language and every post
