Нужны ли именованные объекты в HTML в эпоху браузеров, поддерживающих Unicode?

StackOverflow https://stackoverflow.com/questions/25132

Вопрос

В последние годы я много программировал на PHP, и одна вещь, которая меня продолжает раздражать, — это слабая поддержка Unicode и многобайтовых строк (конечно, изначально ее нет).Например, «htmlentities», похоже, является широко используемой функцией в мире PHP, и я обнаружил, что это совершенно раздражает, когда вы прилагаете усилия к тому, чтобы каждая строка была локализована, храните в своей базе данных только UTF-8, доставляйте только UTF. -8 веб-страниц и т. д.Внезапно где-то между вашей базой данных и браузером появляется безнадежно наивная функция, притворяющаяся, что каждый байт — это символ, и все портит.

я бы просто любовь просто сбросить такие функции, они кажутся совершенно излишними. Необходимо ли в наши дни писать «а» вместо «а»? По крайней мере, мой Firefox, кажется, вполне рад отображать даже самые странные азиатские глифы, если они представлены в правильной кодировке.

Обновлять: Если быть более точным:Являются ли именованные сущности необходимыми для что-либо еще, кроме отображения HTML-тегов (как в «<» вместо «<»)

Обновление 2:

@Конрад:Вы хотите сказать, что нет, именованные сущности не нужны?

@Росс:Но не лучше ли было бы очищать пользовательский ввод при его вводе, чтобы моя логика вывода была свободна от таких проблем?(конечно, при условии, что надежная очистка на входе возможна, но тогда, если это не так, может ли она быть на выходе?)

Это было полезно?

Решение

Именованные объекты в «настоящем» XHTML (т.е.с application/xhtml+xml, а не более часто используемый text/html режим совместимости) не рекомендуется.Помимо пяти, определенных в самом XML (&lt;, &gt;, &amp;, &quot;, &apos;), все они должны быть определены в DTD конкретного DocType, который вы используете.Это означает, что ваш браузер должен явно поддерживать этот DocType, который далеко не дан.С другой стороны, нумерованным объектам, очевидно, требуется только таблица поиска, чтобы получить правильный символ Юникода.

Что касается того, нужны ли вам сущности вообще в эти дни:вы вполне можете ожидать, что любой современный браузер будет поддерживать UTF-8.Поэтому, пока вы можете гарантировать, что база данных, разметка и веб-сервер согласны обслуживать это, откажитесь от сущностей.

Другие советы

При использовании XHTML на самом деле рекомендуется не использовать именованные объекты ([необходима ссылка]).Некоторые браузеры (Firefox…) при анализе этого как XML (чего они обычно не делают) не читают файлы DTD и, следовательно, не могут обрабатывать объекты.

Поскольку в любом случае лучше всего использовать UTF-8 в качестве кодировки, если нет веских причин поступать иначе, это означает лишь то, что создателю документов нужен достойный редактор, который может не только обрабатывать документы, но и обеспечивает хороший способ ввода глифы дайверов.В OS X этой проблемы на самом деле нет, поскольку к большинству необходимых глифов можно получить доступ с помощью клавиш «alt», но в Windows такой функции нет.


@Конрад:Вы хотите сказать, что нет, именованные сущности не нужны?

Именно так.Если, конечно, нет глупых ограничений, например.устаревшие драйверы баз данных, которые ограничивают UTF-8 и т. д.

Кажется, в Safari есть проблемы с некоторыми глифами, но нет с другими. Возможно, это не так. нужный но наверное лучше конечно так сделать, это мое мнение и не подкрепленное ничем, кроме моих собственных наблюдений.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top