parser

Написать ответ на текущее сообщение

 

 
   команды управления поиском

формы: когда символа нет в кодировке 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-1250 входит в поставку parser). если не будет желания экономить сетевой трафик ваших посетителей, и проигнорировать то, что они будут за него переплачивать, кодировку не описывать, отдавать и им тоже в UTF-8.

если что непонятно, сначала подумайте, попробуйте, потом подробно спросите.