Charset detect

Bermuda

Новичок
Charset detect

Хочу перевести весь сайт на 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
 

netdog

net @
искать какую-нить волшебную букву, или набор букв в тексте, который не встречается в другом языке.
Ну это не настолько надежно. И точность этого алгоритма прямопорционально колличеству текста.
 

PhpDeveloper

Guest
Темплеты я могу перекодировать на лету в UTF-8 без особых проблем (есть функция).
То же самое можно сделать со всеми данными. Для этого существует библиотека iconv
 
Сверху