Надоело возиться с различными кодировками, решила решать проблему радикально – перевести сразу ВСЁ на utf. Потом подумала – не переведён у меня остался только мой любимый каталог Палантир. Тем не менее, чтобы ускорить процесс, написала маленький скриптик. Он переводит все файлы заданного расширения из папки рекурсивно в utf и более-менее отслеживает ошибки.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
<?
error_reporting(E_ALL);
$from='';//auto
$to='UTF-8';
$ConvertExt=array('php','inc','css','js','html');
$dir='./uniweb';
 
$it = new RecursiveDirectoryIterator($dir);
// RecursiveIteratorIterator accepts the following modes:
//     LEAVES_ONLY = 0  (default)
//     SELF_FIRST  = 1
//     CHILD_FIRST = 2
foreach (new RecursiveIteratorIterator($it, 2) as $path)
{
  if ($path->isFile())
  {
    $path2=explode('\\',$path);
    $ext=explode('.',$path2[sizeof($path2)-1]);
    $ext=$ext[sizeof($ext)-1];
    if(in_array($ext,$ConvertExt))
    {
      $f=file_get_contents($path);
      $f2=iconv($from,$to,$f);
      echo '<br>Converting file '.$path.'... ';
      if(strlen($f2)>=strlen($f))
      {
      	file_put_contents($path,$f2);
    	echo '<font color="green">File '.$path.' converted sucessfully</font>';
      }
      else echo '<font color="red">File not converted...</font>';
    }
  }
}	
?>

Да. Если у вас есть файлы, которые УЖЕ в UTF, то на них кодировка накроется. К сожалению, не знаю, как разпознавать кодировку в файле.
В примере я использовала настройки iconv по умолчанию, у меня на сервере это “CP-1251”.

В общем, с этим никаких особых проблем не возникло. Только вот пришлось давить заголовок с кодировкой, который сервер высылает по умолчанию. Делать это так:

header('Content-type: text/html; charset="utf-8"',true);

Переходим далее, что делать с переводом базы данных MySQL на кодировку UTF-8.
1) Сразу после коннекта делаем запрос

mysql_query('set names utf8');

После этого сам MySQL начнёт автоматом всё транслировать туда-обратно. Божественная функция. В принципе, на этом можно и остановиться :))
2) Если всё-таки критично хранение именно UTF, то просто вручную делаем запросы через ALTER TABLE. MySQL сам перекодирует таблицы данных в соответствии с тем, что вы изменили.
Да, естественно, что под “вручную” я имю в виду “через интерфейс”. Можно, конечно, “по старинке” пользоваться PHPMyAdmin, но я уже два года использую SQLyog Enterprise Edition – божественная вещь, она, в том числе, умеет создавать дампы любых баз, Копировать из одной удалённой базы в другую через PHP туннель, и много другого интересного.

Вроде как, подводных камней никаких не было. Интересно, как сие действо отразится на CY\PR. Скорее всего, конечно, никак :)