MarkdownリンクはURL内の括弧を正しく解釈しません

URLs in parenthesis do not turn into links での議論の続きです。

RFC2396 のセクション 2.3 には次のように記載されています。

未予約文字は、意味を変えずにエスケープできますが、エスケープされていない文字を許可しないコンテキストで URI が使用されない限り、これを行うべきではありません。

括弧はこのような文字です。Discourse に貼り付けられると、これらの文字を使用する URL(たとえば、特定のコンテキストでの高度な検索のクエリ文字列など)は、Markdown 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’))

上記のように貼り付けた場合は機能しますが、Markdown リンクとして使用すると、機能しなくなります。

[アンカー](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’))

さらに、このような 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の問題のようですね。末尾に))))))を追加して開き括弧と閉じ括弧のバランスを取ると、Markdownリンクが正しく解析されます。

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

これは、Markdown-itエンジン(Discourseで使用されている)が従うCommonMark Specの動作と一致します。

<で始まらず、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'\\))\n

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

になります。これは仕様に記載されているとおりに機能するため、Feature discussion に移動します。

「いいね!」 4

残念ながら、括弧のバランスを取ったり、エスケープしたりすることは、ほとんどの場合行われません :slight_smile:

これに関する別の#bugトピックがあると思います Ensure that links containing )) still render and work correctly

「いいね!」 1