А задачка выглядит довольно простой. Дано: есть файл http://www.englishelp.ru/tmp/utf8.php, кодировка UTF-8 (для создания файла в данной кодировке пробовал использовать редакторы notepad++ и notepad). Настоящее содержимое файла: PHP: <?php header( 'content-type: text/html; charset=utf-8' ); print("Это просто текст"); ?> Проблема: Файл http://www.englishelp.ru/tmp/utf8.php отображается в виде: ?????????[/url]
http://80.235.58.35/utf8_save.php Сохраните этот файл, залейте себе на сервер и посмотрите, насколько корректно он будет отображаться. А то меня беспокоит мой самый первый вариант - кодировка исходного файла.
Тогда пробуем: Создать файл .htaccess в корневой директории со следующим содержанием: Код (Text): AddDefaultCharset windows-1251
Первое, что не понятно почему windows-1251, разбираемся же казалось бы с utf8, нет? Если говорить про корневую директорию самого верхнего для меня на хостинге уровня, то там уже есть .htaccess со строчкой: Код (Text): AddDefaultCharset utf-8 На всякий случай Положил .htaccess в директорию ..\tmp со строчкой AddDefaultCharset windows-1251, разумеется не помогло . Что же касается .htaccess со строчкой AddDefaultCharset, то уже было здесь же: Примеч.: Почему изначально мой .htaccess в корневой директории задает кодировку utf8? Потому что движок сайта - CMS, вся информация хранится в базе данных mysql, кодировка которой utf8. НО, чтобы не внести еще большей неразберихи, напомню приведенный файл utf8.php никакого отношения к базе данных не имеет. просто лежит в директории .../tmp/ Поэтому и исходные данные задачки (см. выше) упрощены, база, я полагаю, нас интересовать не должна
См. выше + только что закомментировал строчки в своем самом корневом .htaccess: Код (Text): #AddDefaultCharset utf-8 #CharsetSourceEnc utf-8 #CharsetDisable On #CharsetRecodeMultipartForms off Результат: http://www.englishelp.ru/tmp/utf8.php Все по-прежнему.
А базу данных вы зачем сюда приписали? От того, что вы вложили файл .htaccess в какую-либо директорию сайта с указанием кодировки ОТДАЧИ никак не повлияет на внутренние файлы самой базы данных. С моим кодом выше мы ясно выясними, что берется РНР-файл в любой кодировке, исполняется и отдается в Windows-1251, причем интернальная кодировка - UTF-8. Спрашивается, почему? Ответ на ум приходит только один - где-то принудительно устанавливается кодировка вывода, причем не со стороны РНР отдается, а уже сервером и браузером принимается. Сервер заголовок шлет неправильный. Расскоментируйте и измените UTF-8 на windows-1251 и посмотрим, что будет. Код (Text): #CharsetDisable On Бу-га-га, я же сказал, что русский Апач стоит)))))))
http://www.englishelp.ru/tmp/utf8_save.php .htaccess: Код (Text): AddDefaultCharset windows-1251 CharsetSourceEnc windows-1251 CharsetDisable On CharsetRecodeMultipartForms off Вот что происходит с остальной частью сайта если в .htaccess AddDefaultCharset windows-1251/ Ибо, как я себе это представляю, в базе все в utf8, .htaccess задает windows-1251, при сравнении вот такое г. http://www.englishelp.ru/teacher/lesson-games.html
Дак теперь файл вообще не понимается сервером ... Я сдаюсь) ПыСы: Вон флоппика попроси, у него большой практический опыт, а я с настройкой серверов не очень хорошо знаком.
utf8_save.php? Вроде понимается, у меня по-прежнему ???????? ???????????? ????????????? ????????? ... А у вас что?
Это синдром русского апача. Корректно лечится так: Код (Text): AddDefaultCharset Off <IfModule mod_charset.c> CharsetDisable On CharsetRecodeMultipartForms Off </IfModule>
В общем при вот таком раскладе любые html, сохраненные в кодировке ANSI отображаются верно, вот пример http://www.englishelp.ru/blocks/for-kids/colouring-books/animals-and-things.php. Файлы же, сохраненные в кодировке utf8, например с таким содержимым (http://www.englishelp.ru/tmp/utf8.php): Код (Text): <?php header( 'content-type: text/html; charset=utf-8' ); print("Это просто текст"); ?> показывают ??????? Приведенный способ видится мне более удачным нежели способ с буфером, потому как нет дополнительных преобразований. С utf8 почему так происходит можете прокомментировать ? :?
Я извиняюсь за прямоту, но «русский апач» — крайне древняя, и даже по тем временам, наиебанутейшая идея перекодировки различных однобайтных киррилических кодировок к одной единой для сервера. Это было в те времена, когда была туева хуча однобайтных кодировок, а «утф как бы еще не было». Точнее он был, но как считалось, что этот пафос никому не нужен. Поэтому русский апач, и все подобные модификации ручками, просто НЕ РАБОТАЮТ с многобайтными кодировками. Это данность. Возможно, это не именно сам русский апач, а похожее извращение. Я знаю верный способ: сменить хостера на нормального.
флоппик, Apple и все остальные участники, спасибо вам большое за помощь! Я еще почитаю подробнее по теме кодировок, тема исключительно широкая За сим считаю проблему закрытой, решение найденым.
Здравствуйте ребята ! помогите разобраться ,скачал сайт с сервера на локалку и перестал работать поисковик ,на хосте работает поисковик а у меня на локалке не работает . Вообше много чего не работало когда я скачал сайт на локалку : 1.Выдавало ошибку Strict Standards: date() [function.date]: It is not safe to rely on the system's timezone settings. Please use the date.timezone setting, the TZ environment variable or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected 'Europe/Helsinki' for '3.0/DST' instead in C:\AppServ\www\doppler.gr\inc\visitors.php on line 13 ] установил до 13-ой строки date_default_timezone_set('Europe/Athens'); заработало (обясните в чем была проблема ). 2.Проблема которая не решилась это поисковик не в верxу страницы а именно над блоком поисковика выдает такую ошибку Warning: ini_set() [function.ini-set]: Option default_charset cannot be changed after headers have been sent (output started at C:\AppServ\www\doppler.gr\index.php:33) in C:\AppServ\www\doppler.gr\corzoogle.php on line 78
Никакого вывода до отсылки заголовков. Буферизируйте вывод, если на то пошло, иначе проверье, чтобы ни один пробел, ни одна буковка не выводились ранее, чем будут посланы заголовки. Установка дефолтной кодировки через ini_set и так посылает браузеру при выводе соответствующий заголовок. Поэтому, смотрите внимательно.
Ошибка второй проблемы говорит что опция default_charset не может быть изменена так как заголовки уже ушли. файл corzoogle.php: строка--74 ob_start(); if ($embedded != true) { do_header(); } elseif($use_utf8 = true) { echo '<meta http-equiv=content-type content="text/html; charset=utf-8">'; } if ($use_utf8 = true) ini_set('default_charset','utf-8');----->>>>строка 78 $search_time = explode(' ',microtime()); $start_time = $search_time[1].substr($search_time[0],1); строка-83 ini_set ('max_execution_time', 180); ну как может на xосте ,отправлятся заголовки и все работать как надо а на локалке нет!??
С такими скудными знаниями вам надо было писать в раздел для новичков. Во-первых, практически у всех хостинг-провайдеров отключен вывод большинства ошибок типа E_STRICT, E_NOTICE и E_WARNING. Спасибо, а то я не знал.
ну если отключен вывод ошибок то почему там работает поисковик а на локалке нет? я так и думал написать в разделе для новичков ,просто подxодящую тему нашел здесь и из за этого написал здесь,извините.
У меня есть подозрения по Register Globals. Какая версия РНР была на хостинге? Какая версия у вас на локальной машине? Какие пакеты расширений использует скрипт? Причин более, чем достаточно, чтобы просто так сидеть и гадать в чем проблема.
вы спросите у меня я вам дам информацию ,не надо гадать! на xосте РНР 5 у меня на локалке РНР 6 ,но я и на РНР 5 пробовал все тоже самое . а как мне узнать какие пакеты расширений использует скрипт...в phpinfo.php? что именно выписать от туда? а где мне писать для новичков, или уже здесь продолжать?
Пишите версии как РНР 5.2.9-2 Давайте так: Что ИМЕННО не работает? При каких обстоятельствах, какую ошибку получаете, что вообще значит "не работает"? Не работает - понятие растяжимое, конкретизируйте и посмотрим что к чему. Давайте уж тут продолжать.