+2

Долгожданное усовершенствование обработки тегов url

arseniiv 8 лет назад обновлен 8 лет назад 1

На форуме периодически всплывает вопрос, почему надо обязательно urlencode’ить адрес, содержащий символы, не входящие в адрес по стандарту URI (но входящие по стандарту IRI), когда все мейнстримные браузеры это делают автоматически — и никто ещё от такой самодеятельности не умер. Вполне можно было бы сделать обратно совместимое изменение, описываемое ниже:


При отправке сообщения во всех тегах вида

[url]адрес[/url]
[url=адрес]...[/url]

где адрес — строка, не являющаяся URI, заменять эту строку на urlencode(адрес). Замену можно устроить регэкспами, разбирать текст на теги не придётся. Если учесть, что замена при отправке уже делается для одиноко стоящих долларов, окружающихся тегами math, то это должно быть очень маленькое и простое изменение. Можно даже оставить ограничение, уже имеющееся при обработке долларов — обрабатывать каждую строку поста отдельно (как я понял, это полумеры против несбалансированных долларов — и здесь они, в принципе, тоже уместны).


Конечно, надо добавить, что это не совсем обратно совместимая фича. Но старые посты она всё равно не затронет, т. к. должна применяться при отправке нового/редактировании (тогда же, когда работает окружение долларов тегами math), а в новых только улучшит UX.


Пожалуйста, рассмотрите это! ::) Если говорить обо мне лично, то dxdy — это одно из немногих мест, из-за которых я не выключаю настройку Firefox, заставляющую его urlencode’ить адреса при копировании.

По поводу регэкспости: если что, распознавать регэкспом «неправильность» адреса я не предлагаю. Можно или (1) все подряд адреса скармливать urlencode, или (2) определять после того как строка поматчилась, и в зависимости от этого оставлять как есть или пропускать через urlencode. Причём, судя по всему, (1) должен давать такие же результаты как и (2) и быть проще в реализации и на какую-то неуловимую миллисекунду быстрее, так что здесь простое решение одновременно и правильное.

Сервис поддержки клиентов работает на платформе UserEcho