Markdown 링크가 URL의 괄호를 올바르게 해석하지 않습니다

괄호 안의 URL이 링크로 변환되지 않는다는 토론을 계속합니다: URLs in parenthesis do not turn into links:

RFC2396의 2.3절에는 다음과 같이 명시되어 있습니다:

예약되지 않은 문자(unreserved characters)는 URI의 의미를 변경하지 않고 이스케이프할 수 있지만, 이스케이프되지 않은 문자가 허용되지 않는 컨텍스트에서 URI가 사용되지 않는 한 이를 수행해서는 안 됩니다.

괄호는 그러한 문자입니다. Discourse에 붙여넣을 때, 이러한 문자를 사용하는 URL(예: 특정 컨텍스트에서 고급 검색을 위한 쿼리 문자열)은 마크다운 URL 구문의 일부로 잘못 해석되어 사용할 수 없게 됩니다.

예를 들어, 이 URL은 저의 협회가 출판한 법적 등재 도서를 검색하여 목록을 가져옵니다:

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

위와 같이 붙여넣으면 작동하지만, 마크다운 링크로 사용하면 더 이상 작동하지 않습니다:

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

또한, 이러한 URL이 이메일로 수신되면 결과는 다음과 같습니다:

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

여기서 "Recherche avancée - Depot"는 올바르게 해석된 링크 제목(클릭 가능)이고, 나머지는 불필요한 문자열이며 클릭 가능한 링크에 포함되지 않습니다. (이메일은 HTML 수신으로 설정되어 있습니다) HTML을 다시 빌드해도 링크가 수정되지 않습니다.

이것은 URL과 CommonMark와 관련된 문제로 보입니다. 끝에 ))))))를 추가하여 여는 괄호와 닫는 괄호를 균형 있게 맞추면 마크다운 링크가 올바르게 파싱됩니다.

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

이것은 CommonMark 스펙의 동작과 일치하며, markdown-it 엔진(Discourse에서 사용)도 이를 따릅니다.

<로 시작하지 않고, ASCII 제어 문자나 공백 문자를 포함하지 않으며, 괄호를 포함하는 경우 (a) 백슬래시로 이스케이프 처리되었거나 (b) 이스케이프 처리되지 않은 괄호의 균형 잡힌 쌍의 일부인 경우에만 허용되는 비어 있지 않은 문자열. (구현체는 성능 문제를 피하기 위해 괄호 중첩에 한도를 둘 수 있지만, 최소한 3단계의 중첩은 지원해야 합니다.)

이것은 markdown-it 데모에서도 테스트할 수 있습니다.

3개의 좋아요

사양은 상당히 명확해 보이며, 사용자는 불균형한 괄호를 이스케이프할 수도 있습니다

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

다음과 같이 변환됩니다.

link

이것은 사양에 설명된 대로 작동하므로, Contribute > Feature 토론으로 이동합니다.

4개의 좋아요

불행히도, 대부분의 경우 괄호를 균형 있게 맞추거나 이스케이프 처리하는 일은 일어나지 않습니다 :slight_smile:

이것에 대해 Contribute > Bug 토픽이 하나 더 있는 것 같습니다. Ensure that links containing )) still render and work correctly

1개의 좋아요