Нужны ли именованные объекты в HTML в эпоху браузеров, поддерживающих Unicode? - PullRequest
16 голосов
/ 24 августа 2008

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

Я бы просто полюбил , чтобы просто сбросить этот вид функций, они кажутся совершенно лишними. Нужно ли в наши дни писать '& auml;' вместо 'ä'? По крайней мере, мой Firefox кажется совершенно счастливым, чтобы отображать даже самые странные азиатские глифы, пока они подаются в правильной кодировке.

Обновление: Если быть точным: именованные объекты необходимы для всего, кроме отображения тегов HTML (как в "& lt;" для "<") </p>

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

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

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

Ответы [ 3 ]

7 голосов
/ 24 августа 2008

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

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

3 голосов
/ 24 августа 2008

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

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

<Ч />

@ Конрад: Вы говорите, что нет, именованные объекты не нужны?

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

0 голосов
/ 24 августа 2008

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

...