P.S. Когда я попытался опубликовать сообщение, появилось всплывающее окно: «Произошла ошибка: извините, новые пользователи могут добавлять в пост не более двух ссылок». Не понимаю, какой именно спам это предотвращает, ведь большинству спамеров достаточно одной ссылки, но теперь мне приходится заменять часть моих аккуратно оформленных markdown-ссылок текстовыми сносками. Сам процесс добавления сноски в редакторе markdown по умолчанию настолько глючный и раздражающий, что заслуживает отдельного отчёта.
P.S.S. Похоже, что ссылки на основе markdown тоже считаются ссылками. Убрал их в пользу Unicode-надстрочных цифр. На 40-й минуте моих попыток написать этот пост.
Согласно STD 66 / RFC 3986¹ (человеко-читаемый извлечённый список²), в фрагменте URL или очереди могут быть неэкранированы 81 символ. Этот список, отсортированный в порядке ASCII фреймворком «Foundation³» в языке программирования Swift: !$&'()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~
Ниже приведён URL, содержащий несколько из этих символов: Example Domain '()*+,-./0123456789:;=?@ABCDEFGHIJKLMNOPQRSTUVWXYZ_abcdefghijklmnopqrstuvwxyz~ Как вы можете заметить, подсветка синтаксиса обрывается на определённом этапе.
Работая над проектом, использующим эти 81 символ для кодирования бинарных данных в фрагментах (по принципу base64, но более компактно), я проверил, как сейчас работает подсветка, соответствующая спецификации, на нескольких сайтах. Хотя похожая ошибка, непоследовательно, присутствовала и в других местах (например, форум GitHub не мог подсветить последний символ, если это ~), в Discourse наблюдается самый широкий набор сломанных символов. Некоторые символы могут или не могут нарушать подсветку в зависимости от какого-то загадочного контекста, поэтому я не думаю, что смогу составить исчерпывающий список.
¹ Google rfc/rfc3986.txt
² Ищите ответ Stack Overflow #26119120
³ Ищите документацию/foundation/nscharacterset/urlfragmentallowed на Apple > Developer
P.S.S.S. Некоторые стандартные адреса электронной почты также не подсвечиваются. Я использую свою вторую ссылку, чтобы перейти на https://e-mail.wtf для примеров.
Не подсвечиваются, но должны:
orgmail(to John Doe)@example.com
“:(){ :|:& };:”@example.com
magic@[::1]