Los enlaces Markdown no interpretan correctamente los paréntesis en las URL

Continuando la discusión de Las URL entre paréntesis no se convierten en enlaces:

La sección 2.3 de la RFC2396 establece que:

Los caracteres no reservados pueden ser escapados sin cambiar la semántica de la URI, pero esto no debe hacerse a menos que la URI se esté utilizando en un contexto que no permita que aparezca el carácter no escapado.

Los paréntesis son tales caracteres. Cuando se pegan en Discourse, las URL que utilizan esos caracteres, por ejemplo, en cadenas de consulta para búsquedas avanzadas en ciertos contextos, se malinterpretan como parte de la sintaxis de URL de Markdown y se vuelven inútiles.

Por ejemplo, esta URL recuperaría una lista de libros depositados legalmente publicados por mi asociación:

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

Aunque funciona cuando se pega, como se muestra arriba, cuando se usa como un enlace de Markdown, ya no funciona:

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

Además, cuando una URL de este tipo se recibe por correo electrónico, el resultado es:

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

donde “Recherche avancée - Depot” es el título del enlace interpretado correctamente (que es enlazable), y el resto es basura, y está ausente del enlace enlazable. (El correo electrónico está configurado para recibir en HTML) La reconstrucción del HTML no soluciona el enlace.

Esto parece más un problema con la URL y commonmark. Si equilibras los paréntesis de apertura y cierre añadiendo )))))) al final, el enlace markdown se analiza correctamente.

enlace

[enlace](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'))))))))

Esto coincide con el comportamiento de la Especificación CommonMark, que sigue el motor markdown-it (utilizado por Discourse).

una secuencia no vacía de caracteres que no comienza con <, no incluye caracteres de control ASCII o caracteres de espacio, e incluye paréntesis solo si (a) están escapados con barra invertida o (b) forman parte de un par equilibrado de paréntesis sin escapar. (Las implementaciones pueden imponer límites a la anidación de paréntesis para evitar problemas de rendimiento, pero al menos tres niveles de anidación deben ser compatibles).

Esto también se puede probar en la demostración de markdown-it.

3 Me gusta

La especificación parece ser bastante clara, el usuario también puede escapar del paréntesis desequilibrado

[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

se convierte en

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

Dado que esto funciona como se describe en la especificación, lo muevo a la discusión de Feature.

4 Me gusta

Desafortunadamente, la mayoría de las veces no se equilibrarán ni se escaparán los paréntesis :slight_smile:

Creo que hay otro tema de Bug sobre esto Ensure that links containing )) still render and work correctly

1 me gusta