формы: когда символа нет в кодировке II | UTF-8 charsetByLang
Александр Петросян (PAF) 27.08.2004 10:16
/ 27.08.2004 10:26
MSIE проявляет «мозг», подставляя вместо буквы последовательность &#xxx;
совершенно очевидно, что задумано «лучше что-то, чем совсем ничего», и такой подход вполне имеет право на жизнь. parser поступает также (при проблеме перекодирования символа).
вывод: если на сайте нужна поддержка разных языков, самый простой подход, это переход на кодировку UTF-8
внутри системы.
при этом
вне системы, посетителю, вы можете отдавать однобайтную кодировку.
@auto[]
$charsetByLang[
$.RU[windows-1251]
$.EN[windows-1251]
$.UA[windows-1251]
$.DE[windows-1250]
]
#внутри работаем с UTF-8
$request:charset[UTF-8]
#пользователю отдаём в однобайтной кодировке, соответствуюей его языку
$response:charset[$charsetByLang.$lang]
$response:content-type[
$.value[text/html]
$.charset[$response:charset]
]
в административном веб-интерфейсе сайта выставляется
$response:charset[UTF-8]
…
так можно будет на одной странице работать одновременно и с русским и с турецким.
какие есть проблемы:
1. SQL сервер может не поддерживать кодировку UTF-8, но если вам
не нужны функции алфавитной сортировки, length, upper, lower
на sql сервере, вы можете SQL серверу не сообщать о том, что вдруг решили сменить смысл тех байт, что у него храните. важно лишь расширить varchar(n) до varchar(n*2), чтобы поместились русские буквы (в UTF-8 они занимают по два байта на букву).
2. чтобы текстовый редактор, в котором вы работаете с файлами сайта поддерживал кодировку UTF-8. все современные редакторы её поддерживают. на крайний случай всегда можно перекодировать файл перед отправкой/после приёма.
[при работе с XML можно использовать смешанные кодировки, там каждый файл может лежать в своей кодировке]
3. вам может быть лень создавать описание однобайтной кодировки для каждого языка (описание кодировки европейских языков, windows-125
0 входит в поставку parser). если не будет желания экономить сетевой трафик
ваших посетителей, и проигнорировать то, что они будут за него переплачивать, кодировку не описывать, отдавать и им тоже в UTF-8.
если что непонятно, сначала подумайте, попробуйте, потом подробно спросите.