روابط Markdown لا تفسر الأقواس في عناوين URLs بشكل صحيح

متابعةً للنقاش من الروابط الموجودة داخل أقواس لا تتحول إلى روابط:

ينص القسم 2.3 من RFC2396 على ما يلي:

يمكن ترميز الأحرف غير المحجوزة دون تغيير دلالات URI، ولكن لا ينبغي القيام بذلك إلا إذا كان URI يُستخدم في سياق لا يسمح بظهور الحرف غير المرمز.

الأقواس هي من هذه الأحرف. عند لصقها في Discourse، يتم تفسير الروابط التي تستخدم هذه الأحرف، على سبيل المثال، في سلاسل الاستعلام للبحث المتقدم في سياقات معينة، بشكل خاطئ كجزء من صيغة رابط Markdown ويتم تقديمها بشكل غير قابل للاستخدام.

على سبيل المثال، هذا الرابط سيسترجع قائمة بالكتب المودعة قانونيًا والتي نشرتها جمعيتي:

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، فإنه لا يعمل بعد الآن:

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

علاوة على ذلك، عندما يتم استلام مثل هذا الرابط عبر البريد الإلكتروني، تكون النتيجة:

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

يتوافق هذا مع السلوك في CommonMark Spec، والذي يتبعه محرك markdown-it (المستخدم بواسطة Discourse).

سلسلة غير فارغة من الأحرف لا تبدأ بـ <، ولا تتضمن أحرف تحكم ASCII أو حرف مسافة، وتتضمن الأقواس فقط إذا (أ) تم الهروب منها بشرطة مائلة للخلف أو (ب) كانت جزءًا من زوج متوازن من الأقواس غير المهربة. (قد تفرض التطبيقات قيودًا على تداخل الأقواس لتجنب مشكلات الأداء، ولكن يجب دعم ثلاثة مستويات على الأقل من التداخل.)

يمكن اختبار هذا أيضًا في markdown-it demo.

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

نظرًا لأن هذا يعمل كما هو موضح في المواصفات، فسأقوم بنقله إلى مناقشة الميزات.

4 إعجابات

للأسف، لن تتم موازنة الأقواس أو الهروب منها في معظم الأوقات :slight_smile:

أعتقد أن هناك موضوعًا آخر حول Bug يتعلق بهذا Ensure that links containing )) still render and work correctly

إعجاب واحد (1)