Короче говоря, HTML — это большой беспорядок (из-за его снисходительности), и использование точки с запятой помогает упростить это НАМНОГО. Я подсчитал, что если учесть сложности, которые я обнаружил, использование амперсанда в качестве разделителя делает весь процесс примерно в три раза сложнее, чем использование точки с запятой вместо разделителя!
Я программист .NET, и, насколько мне известно, .NET не по своей сути допускает ';' разделители, поэтому я написал свои собственные методы синтаксического анализа и обработки, потому что увидел огромную ценность в использовании точки с запятой, а не в и без того проблематичной системе использования амперсандов в качестве разделителей. К сожалению, очень уважаемые люди (например, @Bob Aman в другом ответе) не видят ценности в том, почему использование точки с запятой намного лучше и намного проще, чем использование амперсандов. Итак, теперь я делюсь несколькими моментами, чтобы, возможно, убедить других уважаемых разработчиков, которые еще не осознают ценность использования точки с запятой:
Использование строки запроса типа '?a=1&b=2' на HTML-странице является неправильным (без предварительного кодирования HTML), но в большинстве случаев это работает. Однако это связано только с тем, что большинство браузеров терпимы, и эта терпимость может привести к трудно обнаруживаемым ошибкам, когда, например, значение пары ключ-значение публикуется в URL-адресе HTML-страницы без надлежащего кодирования (непосредственно как '? a=1&b=2' в исходном коде HTML). Строка запроса типа «?who=me+&+you» тоже проблематична.
Мы, люди, можем иметь предубеждения и можем не соглашаться с нашими предубеждениями в течение всего дня, поэтому очень важно признавать свои предубеждения. Например, я согласен, что я просто думаю, что разделение с помощью ';' выглядит «чище». Я согласен с тем, что мое «более чистое» мнение является чисто предвзятым. И у другого разработчика может быть столь же противоположное и столь же обоснованное предубеждение. Таким образом, моя предвзятость в этом отношении не более верна, чем противоположная предвзятость.
Но, учитывая беспристрастную поддержку точки с запятой, облегчающей всем жизнь в долгосрочной перспективе, нельзя правильно оспаривать, когда принимается во внимание вся картина. Короче говоря, использование точек с запятой действительно упрощает жизнь всем, за одним исключением: небольшое препятствие, связанное с привыканием к чему-то новому. Это все. Всегда сложнее что-то изменить. Но сложность внесения изменений меркнет по сравнению с постоянными трудностями продолжения использования &.
С использованием ; поскольку разделитель QueryString делает его НАМНОГО проще. Разделители амперсанд более чем в два раза сложнее кодировать правильно, чем если бы использовались точки с запятой. (Я думаю) большинство реализаций не закодированы должным образом, поэтому большинство реализаций не в два раза сложнее. Но тогда отслеживание и исправление ошибок приводит к потере производительности. Здесь я указываю на 2 отдельных шага кодирования, необходимых для правильного кодирования QueryString, когда & является разделителем:
- Шаг 1: URL-адрес кодирует как ключи, так и значения строки запроса.
- Шаг 2: Объедините ключи и значения, такие как «a=1&b=2», после того, как они будут закодированы в URL из шага 1.
- Шаг 3: Затем HTML кодирует всю QueryString в исходном HTML-коде страницы.
Таким образом, специальное кодирование должно быть выполнено дважды для правильной (безошибочной) кодировки URL, и не только это, но кодировки представляют собой два разных типа кодирования. Первая — это кодировка URL, а вторая — кодировка HTML (для исходного кода HTML). Если что-то из этого неверно, то я могу найти вам ошибку. Но шаг 3 отличается для XML. Для XML вместо этого требуется кодировка объекта символов XML (что почти идентично). Я хочу сказать, что последняя кодировка зависит от контекста URL-адреса, будь то веб-страница HTML или документация XML.
Теперь с гораздо более простыми разделителями с запятой процесс выглядит так, как и следовало ожидать:
- 1: URL кодирует ключи и значения,
- 2: объединить значения вместе. (Без кодирования для шага 3.)
Я думаю, что большинство веб-разработчиков пропускают шаг 3, потому что браузеры очень снисходительны. Но это приводит к ошибкам и дополнительным осложнениям при поиске этих ошибок или невозможности пользователям что-либо делать, если этих ошибок не было, или написании отчетов об ошибках и т. д.
Другая сложность при реальном использовании возникает при написании разметки XML-документации в моем исходном коде как на C#, так и на VB.NET. Поскольку & должен быть закодирован, это буквально тормозит мою производительность. Этот дополнительный шаг 3 также затрудняет чтение исходного кода. Таким образом, этот трудный для чтения недостаток относится не только к HTML и XML, но и к другим приложениям, таким как код C# и VB.NET, поскольку их документация использует XML-документацию. Таким образом, сложность кодирования шага № 3 распространяется и на другие приложения.
Таким образом, используя ; в качестве разделителя прост, потому что (правильный) процесс при использовании точки с запятой - это то, как обычно ожидается, что процесс будет выглядеть так: должен быть выполнен только один шаг кодирования.
Возможно, это было не слишком запутанно. Но вся путаница или трудности возникают из-за использования разделительного символа, который должен быть закодирован в HTML. Таким образом, «&» является виновником. И точка с запятой избавляет от всех этих сложностей.
(Я укажу, что описанный выше процесс из трех и двух шагов обычно соответствует тому, сколько шагов потребуется для большинства приложений. Однако для полностью надежного кода все 3 шага необходимы независимо от того, какой разделитель используется. Но по моему опыту, большинство реализаций небрежны и ненадежны. Поэтому использование точки с запятой в качестве разделителя строки запроса облегчило бы жизнь большему количеству людей с меньшим количеством ошибок веб-сайта и взаимодействия, если бы все приняли точку с запятой по умолчанию вместо амперсанда.)
person
Shawn Kovac
schedule
25.01.2016