Перевод всех файлов сайта на UTF1 November 2008, 03:11:00 |
Надоело возиться с различными кодировками, решила решать проблему радикально – перевести сразу ВСЁ на 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. Скорее всего, конечно, никак :)
| Tags: PHP | Comments [ 2 ] |

Subscribe? Sure? What for?

19 December at 4:35 pm
Спасибо большое. Вы спасли меня от рутины :) Но у вас в коде в строке “if($f2&&(strlen($f2)>=strlen($f)))” вот эти & – лишние.
19 December at 4:45 pm
Не за что, за тем и выкладывала )
На самом деле, лишние даже “$f2&&”.
Убрала, хоть и не принципиально :)
Писалось-то для себя , на скорую руку…