Bermuda
Новичок
Charset detect
Хочу перевести весь сайт на UTF-8 так как на одной странице может встречаться аж 3 языка (русский, английский, испанский). Отсюда следует, что в какой-либо из стандартных кодировок три языка сразу не уживутся.
Зашел в тупик. Попробую описать ситуацию:
Есть три источника данных:
- темплеты (шаблоны).
- файл ресурсов (сообщения об ошибках и прочее).
- данные из базы данных.
шаблоны могут быть на любом из трех языков (русский, английский, испанский).
ресурсы могут быть на любом из трех языков (русский, английский, испанский).
данные из базы могут быть только на одном языке - испанском.
Темплеты я могу перекодировать на лету в UTF-8 без особых проблем (есть функция).
Переменные для парсинга шаблонов передаются в соответствующую функцию следующим образом:
Есть функция которая парсит этот массив. В общем это не принципиально.
Трудность в том, что структура организована так, что в любом месте кода мы не можем точно знать откуда взяты переменные - из базы или из файла ресурсов. Мало того, такой массив может содержать СМЕШАННЫЕ переменные (часть на русском, часть на испанском). Для того чтобы перекодировать в другую кодировку нужно знать исходную кодировку.
Есть два решения этой проблемы:
1. Разделять вывод переменных из базы от переменных из ресурсов. Переменные из базы перекодировать отдельно, переменные из ресурсов - отдельно, благо исходная кодировка известна. В принципе спасает, НО придется переписать просто огромное количество кода - не катит, оно того не стоит.
2. "Волшебным" способом определять исходную кодировку данных и перекодировать в зависимости от этой кодировки.
Вопрос:
Существует ли этот "волшебный" способ определения кодировки текста? Подкиньте алгоритм?
Заранее благодарен!
Update: все данные хранятся в "родных" кодировках, а не в UTF-8
Темплеты: русские, испанские, английские -- windows-1251, iso-8859-1, iso-8859-1 соответственно)
Ресурсы: русские, испанские, английские -- windows-1251, iso-8859-1, iso-8859-1 соответственно)
База данных: iso-8859-1
Хочу перевести весь сайт на UTF-8 так как на одной странице может встречаться аж 3 языка (русский, английский, испанский). Отсюда следует, что в какой-либо из стандартных кодировок три языка сразу не уживутся.
Зашел в тупик. Попробую описать ситуацию:
Есть три источника данных:
- темплеты (шаблоны).
- файл ресурсов (сообщения об ошибках и прочее).
- данные из базы данных.
шаблоны могут быть на любом из трех языков (русский, английский, испанский).
ресурсы могут быть на любом из трех языков (русский, английский, испанский).
данные из базы могут быть только на одном языке - испанском.
Темплеты я могу перекодировать на лету в UTF-8 без особых проблем (есть функция).
Переменные для парсинга шаблонов передаются в соответствующую функцию следующим образом:
PHP:
$this->_tpl->assignArray(array(
"PATH" => $path,
"FILE" => $file,
"SIZE" => $size[3],
"HEIGHT" => $size[1],
"ALT" => DESCRIPTION_SHORT,
));
Трудность в том, что структура организована так, что в любом месте кода мы не можем точно знать откуда взяты переменные - из базы или из файла ресурсов. Мало того, такой массив может содержать СМЕШАННЫЕ переменные (часть на русском, часть на испанском). Для того чтобы перекодировать в другую кодировку нужно знать исходную кодировку.
Есть два решения этой проблемы:
1. Разделять вывод переменных из базы от переменных из ресурсов. Переменные из базы перекодировать отдельно, переменные из ресурсов - отдельно, благо исходная кодировка известна. В принципе спасает, НО придется переписать просто огромное количество кода - не катит, оно того не стоит.
2. "Волшебным" способом определять исходную кодировку данных и перекодировать в зависимости от этой кодировки.
Вопрос:
Существует ли этот "волшебный" способ определения кодировки текста? Подкиньте алгоритм?
Заранее благодарен!
Update: все данные хранятся в "родных" кодировках, а не в UTF-8
Темплеты: русские, испанские, английские -- windows-1251, iso-8859-1, iso-8859-1 соответственно)
Ресурсы: русские, испанские, английские -- windows-1251, iso-8859-1, iso-8859-1 соответственно)
База данных: iso-8859-1