В последние годы я много программировал на PHP, и одна вещь, которая меня раздражает, – это слабая поддержка Unicode и многобайтовых строк (конечно, изначально их нет). Например, «htmlentities», по-видимому, является многоиспользуемой функцией в мире PHP, и я обнаружил, что это абсолютно раздражает, когда вы прилагаете усилия к тому, чтобы каждая строка была локализована, а только хранить UTF-8 в вашей базе данных, только доставлять UTF -8 веб-страниц и т. Д. Внезапно, где-то между вашей базой данных и браузером есть эта безнадежно наивная функция, притворяющаяся каждым байтом, является персонажем и все испортит.
Я просто хотел бы просто свалить такие функции, они кажутся совершенно лишними. В эти дни все еще необходимо написать '& auml;' вместо «ä»? По крайней мере, мой Firefox кажется счастливым отображать даже самые странные азиатские глифы, пока они обслуживаются надлежащим кодированием.
Обновление: точнее: Являются ли именованные объекты необходимыми для чего-либо еще, кроме отображения тегов HTML (как в «& lt;» для «<»)
@Konrad: Вы говорите, что нет, именованные объекты не нужны?
@Ross: Но не лучше ли было бы дезинформировать пользовательский ввод, когда он будет введен, чтобы моя логика вывода не содержала таких проблем? (предполагая, конечно, что надежная дезинфекция на входе возможна – но тогда, если это не так, может ли она быть на выходе?)
Именованные объекты в «реальном» XHTML (т. Е. С application/xhtml+xml
, а не с более часто используемым режимом совместимости text/html
) не приветствуются. Помимо пяти, определенных в самом XML ( <
>
&
, "
,"), все они должны быть определены в DTD конкретного используемого типа DocType. Это означает, что ваш браузер должен явно поддерживать этот DocType, который далек от заданного. С другой стороны, нумерованные объекты, очевидно, требуют только таблицы поиска, чтобы получить правильный символ Юникода.
Что касается того, нужны ли вам сущности во все эти дни: вы можете в значительной степени ожидать, что любой современный браузер поддержит UTF-8. Поэтому, пока вы можете гарантировать, что база данных, разметка и веб-сервер все согласятся на это, удалите сущности.
Если вы используете XHTML, на самом деле рекомендуется не использовать именованные объекты ([править]). Некоторые браузеры (Firefox …), анализируя это как XML (чего обычно нет), не читают DTD-файлы и, следовательно, не могут обрабатывать сущности.
Поскольку в любом случае лучше использовать UTF-8 в качестве кодировки, если нет никаких веских причин для этого, это означает, что создателю документов нужен достойный редактор, который может обрабатывать документы не только, но и обеспечивает хороший способ ввода глаголы водолазов. OS X на самом деле не имеет этой проблемы, потому что большинство необходимых глифов можно получить с помощью клавиш «alt», но Windows не имеет этой функции.
@Konrad: Вы говорите, что нет, именованные объекты не нужны?
Точно. Если, конечно, не существует глупых ограничений, например, устаревшие драйверы базы данных, которые забивают UTF-8 и т. Д.
Кажется, что у Сафари есть проблемы с некоторыми глифами, но не с другими, это может и не понадобиться, но, вероятно, это лучше всего, конечно, это мое мнение и не подкреплено ничем, кроме моих собственных наблюдений.