За последние 24 часа нас посетили 63117 программистов и 1742 робота. Сейчас ищут 1168 программистов ...

Проблема с кодировкой

Тема в разделе "Прочие вопросы по PHP", создана пользователем FiMka, 12 май 2009.

  1. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    А задачка выглядит довольно простой.

    Дано: есть файл http://www.englishelp.ru/tmp/utf8.php, кодировка UTF-8 (для создания файла в данной кодировке пробовал использовать редакторы notepad++ и notepad). Настоящее содержимое файла:
    PHP:
    1. <?php header( 'content-type: text/html; charset=utf-8' );
    2.     print("Это просто текст");
    3. ?>
    Проблема: Файл http://www.englishelp.ru/tmp/utf8.php отображается в виде: ?????????[/url]
     
  2. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    http://80.235.58.35/utf8_save.php
    Сохраните этот файл, залейте себе на сервер и посмотрите, насколько корректно он будет отображаться.
    А то меня беспокоит мой самый первый вариант - кодировка исходного файла.
     
  3. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    http://narod.ru/disk/8642073000/utf8.zip.html

    http://www.englishelp.ru/tmp/utf8_save.php
     
  4. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Тогда пробуем:

    Создать файл .htaccess в корневой директории со следующим содержанием:

    Код (Text):
    1. AddDefaultCharset windows-1251
     
  5. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    Первое, что не понятно почему windows-1251, разбираемся же казалось бы с utf8, нет?
    Если говорить про корневую директорию самого верхнего для меня на хостинге уровня, то там уже есть .htaccess со строчкой:
    Код (Text):
    1. AddDefaultCharset utf-8
    На всякий случай Положил .htaccess в директорию ..\tmp со строчкой AddDefaultCharset windows-1251, разумеется не помогло :).

    Что же касается .htaccess со строчкой AddDefaultCharset, то уже было здесь же:
    Примеч.: Почему изначально мой .htaccess в корневой директории задает кодировку utf8? Потому что движок сайта - CMS, вся информация хранится в базе данных mysql, кодировка которой utf8. НО, чтобы не внести еще большей неразберихи, напомню приведенный файл utf8.php никакого отношения к базе данных не имеет. просто лежит в директории .../tmp/ Поэтому и исходные данные задачки (см. выше) упрощены, база, я полагаю, нас интересовать не должна
     
  6. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    блин, так выкиньте его оттуда, честное слово.
     
  7. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    См. выше + только что закомментировал строчки в своем самом корневом .htaccess:
    Код (Text):
    1. #AddDefaultCharset utf-8
    2. #CharsetSourceEnc utf-8
    3. #CharsetDisable On
    4. #CharsetRecodeMultipartForms off
    Результат: http://www.englishelp.ru/tmp/utf8.php Все по-прежнему.
     
  8. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    А базу данных вы зачем сюда приписали?
    От того, что вы вложили файл .htaccess в какую-либо директорию сайта с указанием кодировки ОТДАЧИ никак не повлияет на внутренние файлы самой базы данных.
    С моим кодом выше мы ясно выясними, что берется РНР-файл в любой кодировке, исполняется и отдается в Windows-1251, причем интернальная кодировка - UTF-8.
    Спрашивается, почему?
    Ответ на ум приходит только один - где-то принудительно устанавливается кодировка вывода, причем не со стороны РНР отдается, а уже сервером и браузером принимается. Сервер заголовок шлет неправильный.

    Расскоментируйте и измените UTF-8 на windows-1251 и посмотрим, что будет.


    Код (Text):
    1. #CharsetDisable On
    Бу-га-га, я же сказал, что русский Апач стоит)))))))
     
  9. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    http://www.englishelp.ru/tmp/utf8_save.php :(
    .htaccess:
    Код (Text):
    1. AddDefaultCharset windows-1251
    2. CharsetSourceEnc windows-1251
    3. CharsetDisable On
    4. CharsetRecodeMultipartForms off
    Вот что происходит с остальной частью сайта если в .htaccess AddDefaultCharset windows-1251/ Ибо, как я себе это представляю, в базе все в utf8, .htaccess задает windows-1251, при сравнении вот такое г.
    http://www.englishelp.ru/teacher/lesson-games.html
     
  10. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Дак теперь файл вообще не понимается сервером ...
    Я сдаюсь)

    ПыСы:
    Вон флоппика попроси, у него большой практический опыт, а я с настройкой серверов не очень хорошо знаком.
     
  11. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    utf8_save.php? Вроде понимается, у меня по-прежнему ???????? ???????????? ????????????? ????????? ... А у вас что?
     
  12. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Знаки вопроса означают, что их отдал сервер, а не браузер их так отобразил.
     
  13. Это синдром русского апача.

    Корректно лечится так:

    Код (Text):
    1. AddDefaultCharset Off
    2. <IfModule mod_charset.c>
    3.         CharsetDisable On
    4.         CharsetRecodeMultipartForms Off
    5. </IfModule>
     
  14. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    В общем при вот таком раскладе любые html, сохраненные в кодировке ANSI отображаются верно, вот пример http://www.englishelp.ru/blocks/for-kids/colouring-books/animals-and-things.php.
    Файлы же, сохраненные в кодировке utf8, например с таким содержимым (http://www.englishelp.ru/tmp/utf8.php):
    Код (Text):
    1. <?php header( 'content-type: text/html; charset=utf-8' );
    2.     print("Это просто текст");
    3. ?>
    показывают ???????

    Приведенный способ видится мне более удачным нежели способ с буфером, потому как нет дополнительных преобразований. С utf8 почему так происходит можете прокомментировать ? :?
     
  15. Я извиняюсь за прямоту, но «русский апач» — крайне древняя, и даже по тем временам, наиебанутейшая идея перекодировки различных однобайтных киррилических кодировок к одной единой для сервера. Это было в те времена, когда была туева хуча однобайтных кодировок, а «утф как бы еще не было». Точнее он был, но как считалось, что этот пафос никому не нужен. Поэтому русский апач, и все подобные модификации ручками, просто НЕ РАБОТАЮТ с многобайтными кодировками. Это данность. Возможно, это не именно сам русский апач, а похожее извращение.

    Я знаю верный способ: сменить хостера на нормального.
     
  16. FiMka

    FiMka Активный пользователь

    С нами с:
    12 май 2009
    Сообщения:
    66
    Симпатии:
    0
    Адрес:
    Санкт-Петербург
    флоппик, Apple и все остальные участники, спасибо вам большое за помощь!
    Я еще почитаю подробнее по теме кодировок, тема исключительно широкая :D
    За сим считаю проблему закрытой, решение найденым.
     
  17. gabbiano

    gabbiano Активный пользователь

    С нами с:
    26 май 2009
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Салоники-ГРЕЦИЯ
    Здравствуйте ребята ! помогите разобраться ,скачал сайт с сервера на локалку и перестал работать поисковик ,на хосте работает поисковик а у меня на локалке не работает . Вообше много чего не работало когда я скачал сайт на локалку :

    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
     
  18. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Никакого вывода до отсылки заголовков.
    Буферизируйте вывод, если на то пошло, иначе проверье, чтобы ни один пробел, ни одна буковка не выводились ранее, чем будут посланы заголовки.
    Установка дефолтной кодировки через ini_set и так посылает браузеру при выводе соответствующий заголовок.
    Поэтому, смотрите внимательно.
     
  19. gabbiano

    gabbiano Активный пользователь

    С нами с:
    26 май 2009
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Салоники-ГРЕЦИЯ
    Ошибка второй проблемы говорит что опция 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осте ,отправлятся заголовки и все работать как надо а на локалке нет!??
     
  20. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    С такими скудными знаниями вам надо было писать в раздел для новичков.
    Во-первых, практически у всех хостинг-провайдеров отключен вывод большинства ошибок типа E_STRICT, E_NOTICE и E_WARNING.

    Спасибо, а то я не знал.
     
  21. gabbiano

    gabbiano Активный пользователь

    С нами с:
    26 май 2009
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Салоники-ГРЕЦИЯ
    ну если отключен вывод ошибок то почему там работает поисковик а на локалке нет?

    я так и думал написать в разделе для новичков ,просто подxодящую тему нашел здесь и из за этого написал здесь,извините.
     
  22. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    У меня есть подозрения по Register Globals.
    Какая версия РНР была на хостинге? Какая версия у вас на локальной машине?
    Какие пакеты расширений использует скрипт?
    Причин более, чем достаточно, чтобы просто так сидеть и гадать в чем проблема.
     
  23. gabbiano

    gabbiano Активный пользователь

    С нами с:
    26 май 2009
    Сообщения:
    8
    Симпатии:
    0
    Адрес:
    Салоники-ГРЕЦИЯ
    вы спросите у меня я вам дам информацию ,не надо гадать! :)

    на xосте РНР 5 у меня на локалке РНР 6 ,но я и на РНР 5 пробовал все тоже самое .

    а как мне узнать какие пакеты расширений использует скрипт...в phpinfo.php? что именно выписать от туда?

    а где мне писать для новичков, или уже здесь продолжать?
     
  24. Apple

    Apple Активный пользователь

    С нами с:
    13 янв 2007
    Сообщения:
    4.984
    Симпатии:
    2
    Пишите версии как РНР 5.2.9-2

    Давайте так:
    Что ИМЕННО не работает?
    При каких обстоятельствах, какую ошибку получаете, что вообще значит "не работает"?
    Не работает - понятие растяжимое, конкретизируйте и посмотрим что к чему.

    Давайте уж тут продолжать.