Как стать автором
Обновить

Комментарии 25

не совсем ясна суть вопроса.
есть есть проблема с данными в MySQL, это это реашется при помощи mysql_query('SET CHARACTER_SET_CONNECTION=CP1251 ');

если нужно преобразовать кодировку внутри скрипта, то это $txt = mb_convert_encoding($txt,'CP1251','UTF8');

а если просто апач отправляет заголовки с указанием кодировки UTF8, в то время, как предполагается вывод в windows-1251, до достаточно прописать в скрипте
header('Content-Type: text/html; charset=CP1251');
в MySQL лучше «SET NAMES CP1251»
это несколько разные вещи
кроме того, зависит от версии MySQL
товарищ правильно говорит — set names является базовым способом переколировки соединения с MySQL с версии 4.11
header("Content-type: text/html; charset=windows-1251");
У меня ограничен доступ к настраиванию сервера :(
>после перекодирования все PHP скрипты резко стали нерабочими.
попробуйте убедить перекодирвщик не вставлять в начало BOM-сигнатуру. должно помочь :)
сам никогда с проблемой пакетного перекодирования не сталкивался, поэтому перекодировщик не посоветую, но то что BOM вредит PHP замечал не раз.
Если сигнатура используется в include-скриптах это должно приводить к ошибке Can not modify header information :(
ну, когда читаешь подобные вопросы, то предположение о природе "php поломалось" срабатывает в 90% случаев. :)
я когда писал именно про эту ошибку и думал.
просто этот вопрос попал в оставшиеся 10 %
Можно попробовать на том же PHP написать программу, которая пробегает по всем директориям с PHP скриптами и каждый скрипт как текстовый файл с помощью функции iconv("WINDOWS-1251","UTF-8",$content) перекодирует в UTF.
Зачем же на PHP? Борн шелл вполне обучен:
find . -type f -exec iconv -f cp1251 -t utf8 {} -o {}-utf8 \;


После этого все файлы получат рядом перекодированную копию.
Возможно, стоит попробовать .htaccess вида
CharsetDisable On
и продолжать делать свои дела в windows-1251.
Если не получится, то
function encode($buf)
{
return iconv("Windows-1251","UTF-8",$buf);
}

header("Content-type: text/html;charset=utf-8");
ob_start('encode');
блаблабла
ob_end_flush();
Все это, если при условии, что вы пробовали указывать кодировку в мета-тегах и прописывать header("Content-type: text/plain; charset=windows-1251");
*Все это при условии
Фишка с ob_start - интересное решение, но если сайт находится на виртульном хостинге, то кеширование данных на стороне сервера может привести к тормозам при просмотре страниц сайта (загрузок страниц много, ресурсов для скриптов мало, бесплатный движок не радует оптимизированностью кода итд итп...)
Это решение, сводящее к минимуму усилия автора по модификации кода.
Хотя, как я понял, причины вроде бы прозаичней. Если код ему пишет НЛО посредством Dreamweaverа, то достаточно воткнуть в это <meta content="text/html; charset=windows-1251" http-equiv="Content-Type" />.
конечно первым делом я попробовал с метой "поиграться" :) вот только браузеру было ровно пофиг на нее. Опять же, достаточно в дрёме в свойствах документа (Ctrl+B по моему) сменить кодировку на Unicode (не просто поставить мету), и дрём все аккуратно конвертирует. Вот только 100 файлов так вот вручную перефигачивать - совсем-совсем не хочется :(
на запись в htaccess сервер отреагировал так:

"Internal Server Error The server encountered an internal error or misconfiguration and was unable to complete your request."

function encode($buf) и т.п. - куда это сувадь? :)
Большое спасибо что минуснули в карму. Просто огромное... попросил помочь в вопросе, с которым многим предстоит столкнутся...
Ещё раз спасибо за минус в карму, мне понравилось.
Напишите простенький скрипт на PHP, раз его привели здесь. Пробегитесь по всем файлам и выполните функцию iconv для конвертации содержимого из win-1251 в utf.
Если будут трудности, пишите, разберемся.
К сожалению я не кодер, юзер only пока...
если я понял, то windows-1251 все-таки выдается, но кодировка в браузерах оказывается сбита. попробуйте кодировку прописать в .htaccess:

AddDefaultCharset windows-1251
Это чудо :) работает!

Но таки я заинтересовался реальным переводом на уникод, вроде скрипт (а именно DLE, лицензионный) "держит" его, да вот как уговорить его работать :) чтобы и контент тоже в утф...
!/bin/bash
for file in `find ./ -type f -name \*.php -o -name \*.tpl -o -name \*.inc`; do \
iconv -f CP1251 -t UTF-8 ${file} > ${file}.utf8 &&
mv ${file}.utf8 ${file};
done
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории