I link Markdown non interpretano correttamente le parentesi nelle URL

Continuando la discussione da Gli URL tra parentesi non diventano link:

La Sezione 2.3 della RFC2396 afferma che:

I caratteri non riservati possono essere codificati senza alterare la semantica dell’URI, ma ciò non dovrebbe essere fatto a meno che l’URI non venga utilizzato in un contesto che non consente la presenza del carattere non codificato.

Le parentesi sono tali caratteri. Quando incollati in Discourse, gli URL che utilizzano tali caratteri, ad esempio nelle stringhe di query per la ricerca avanzata in determinati contesti, vengono interpretati erroneamente come parte della sintassi dei link Markdown e resi inutilizzabili.

Ad esempio, questo URL recupererebbe un elenco di libri depositati legalmente pubblicati dalla mia associazione:

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’))

Sebbene funzioni quando incollato, come sopra, quando utilizzato come link Markdown, non funziona più:

[anchor](url) → [anchor](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’))

Inoltre, quando un tale URL viene ricevuto via email, il risultato è:

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

dove “Recherche avancée - Depot” è il titolo del link interpretato correttamente (che è cliccabile), e il resto è spazzatura - e assente dal link cliccabile. (L’email è impostata per ricevere in HTML) La ricostruzione dell’HTML non risolve il link.

Sembra più un problema con l’URL e commonmark. Se bilanci le parentesi di apertura e chiusura aggiungendo )))))) alla fine, il collegamento markdown viene analizzato correttamente.

link

[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'))))))))

Questo corrisponde al comportamento nella CommonMark Spec, che il motore markdown-it segue (utilizzato da Discourse).

una sequenza non vuota di caratteri che non inizia con <, non include caratteri di controllo ASCII o caratteri spazio, e include parentesi solo se (a) sono precedute da una barra rovesciata o (b) fanno parte di una coppia bilanciata di parentesi non precedute da barra rovesciata. (Le implementazioni possono imporre limiti all’annidamento delle parentesi per evitare problemi di prestazioni, ma almeno tre livelli di annidamento dovrebbero essere supportati.)

Questo può essere testato anche nella demo di markdown-it.

3 Mi Piace

La specifica sembra essere piuttosto chiara, l’utente può anche uscire dalla parentesi sbilanciata

[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

diventa

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

Poiché questo funziona come descritto nella specifica, lo sposto nella discussione Feature.

4 Mi Piace

Purtroppo, bilanciare le parentesi o sfuggirle non accadrà la maggior parte del tempo :slight_smile:

Penso che ci sia un altro argomento Bug a riguardo Ensure that links containing )) still render and work correctly

1 Mi Piace