Les liens Markdown n'interprètent pas correctement les parenthèses dans les URLs

Continuant la discussion de Les URL entre parenthèses ne se transforment pas en liens :

La Section 2.3 de la RFC2396 stipule que :

Les caractères non réservés peuvent être échappés sans changer la sémantique de l’URI, mais cela ne devrait pas être fait à moins que l’URI ne soit utilisé dans un contexte qui ne permet pas l’apparition du caractère non échappé.

Les parenthèses sont de tels caractères. Lorsqu’elles sont collées dans Discourse, les URL utilisant ces caractères, par exemple dans les chaînes de requête pour la recherche avancée dans certains contextes, sont mal interprétées comme faisant partie de la syntaxe d’URL Markdown et deviennent inutilisables.

Par exemple, cette URL récupérerait une liste de livres déposés légalement publiés par mon association :

https://www.depotlegal.be/Depot/form.aspx?SC=KBRVITRINE1#/Search/(query:(AdvancedQuery:(queryGroups:!((queryClauses:!((index:KBR264b_idx,logical:0,operator:0,otherValue:!n,value:‘petites%20singularités’))

Bien qu’elle fonctionne lorsqu’elle est collée, comme ci-dessus, lorsqu’elle est utilisée comme lien Markdown, elle ne fonctionne plus :

[ancre](url) → [ancre](https://www.depotlegal.be/Depot/form.aspx?SC=KBRVITRINE1#/Search/(query:(AdvancedQuery:(queryGroups:!((queryClauses:!((index:KBR264b_idx,logical:0,operator:0,otherValue:!n,value:‘petites%20singularités’))

De plus, lorsqu’une telle URL est reçue par e-mail, le résultat est :

Recherche avancée - Depot)))),ForceSearch:!t,Grid:!n,Page:0,PageRange:3,QueryString:!n,ResultSize:-1,ScenarioCode:KBRVITRINE1,SearchContext:1))

où “Recherche avancée - Depot” est le titre du lien correctement interprété (et cliquable), et le reste est du charabia – et absent du lien cliquable. (L’e-mail est configuré pour recevoir en HTML) La reconstruction du HTML ne corrige pas le lien.

Cela ressemble davantage à un problème d’URL et de commonmark. Si vous équilibrez les parenthèses ouvrantes et fermantes en ajoutant )))))) à la fin, le lien markdown est correctement analysé.

lien

[lien](https://www.depotlegal.be/Depot/form.aspx?SC=KBRVITRINE1#/Search/(query:(AdvancedQuery:(queryGroups:!((queryClauses:!((index:KBR264b_idx,logical:0,operator:0,otherValue:!n,value:'petites%20singularit%C3%A9s'))))))))

Cela correspond au comportement de la Spécification CommonMark, que le moteur markdown-it suit (utilisé par Discourse).

une séquence non vide de caractères qui ne commence pas par <, n’inclut pas de caractères de contrôle ASCII ou de caractère espace, et n’inclut des parenthèses que si (a) elles sont échappées par une barre oblique inverse ou (b) elles font partie d’une paire de parenthèses non échappées et équilibrées. (Les implémentations peuvent imposer des limites à l’imbrication des parenthèses pour éviter les problèmes de performance, mais au moins trois niveaux d’imbrication devraient être pris en charge.)

Cela peut également être testé dans la démo markdown-it.

3 « J'aime »

Le spéc semble assez clair, l’utilisateur peut également échapper la parenthèse déséquilibrée

[link](https://www.depotlegal.be/Depot/form.aspx?SC=KBRVITRINE1#/Search/\\(query:\\(AdvancedQuery:\\(queryGroups:!\\(\\(queryClauses:!\\(\\(index:KBR264b_idx,logical:0,operator:0,otherValue:!n,value:'petites%20singularit%C3%A9s'\\))\n

devient

[link](Recherche avancée - Depot)\n

Comme cela fonctionne comme décrit dans le spéc, je le déplace vers la discussion Feature.

4 « J'aime »

Malheureusement, l’équilibrage ou l’échappement des parenthèses n’arrivera pas la plupart du temps :slight_smile:

Je pense qu’il y a un autre sujet de Bug à ce sujet Ensure that links containing )) still render and work correctly

1 « J'aime »