За последние 24 часа нас посетили 18013 программистов и 1677 роботов. Сейчас ищут 1127 программистов ...

Как убрать кракозяблы на PHP

Тема в разделе "Установка PHP", создана пользователем Php-beginners, 25 фев 2010.

  1. Php-beginners

    Php-beginners Активный пользователь

    С нами с:
    25 фев 2010
    Сообщения:
    15
    Симпатии:
    0
    Перенес сайт с другого хостинга - старый работал в ANSI, новый работает в UTF-8
    в итоге все странички показывает кракозяблами - http://t6.asp-net.ru/forum/
    как это можно убрать?
    спасибо
     
  2. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Бгг, если такое же и в базе - то никак.

    Только заново все вбивать.
     
  3. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    mysql> set names utf8;
    mysql> select * from `table`

    UPD> видимо в твоём случае: никак :)
     
  4. Php-beginners

    Php-beginners Активный пользователь

    С нами с:
    25 фев 2010
    Сообщения:
    15
    Симпатии:
    0
    нет базу я переносил отдельно - я взял скрит в phpMyAdmin - сделал его разгрузку текстом, сохранил как текст в юникод и загрузил текстовый скрипт в DevArt - в итоге у меня в базе все нормально - юникод - я могу сделать отборы в базе - я все вижу без кракозяблов
    но кракозяблы у меня даже на статических заголовках страниц - не только на сообщениях, уложенных в базу
     
  5. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Ну если база нормальная, то установи то что сказал topas, установи заголовки и мета теги в utf-8
    и посмотри. Контент из базы должен будет показываться нормально.

    Со статическими надписями надо разбираться отдельно - в частности взять iconv и сконвертировать файлы шаблонов из 1251 в utf8
     
  6. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    PHP:
    1. <?php header('Content-Type: text/html; charset=utf-8');
    2. mysql_query('SET NAMES utf8');
    3.  
    но повторюсь: вряд ли вам это поможет
     
  7. Php-beginners

    Php-beginners Активный пользователь

    С нами с:
    25 фев 2010
    Сообщения:
    15
    Симпатии:
    0
    спс, ну это уже хоть что-то - что можно попробовать
    а то я просто не пойму с какого бока за это хвататся
     
  8. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Php-beginners
    Первое: данные в базе данных должны лежать в той кодировке что и сама база данных. Если у вас, к примеру, данные в cp1251, БД настроена на UTF8 и вы пытаетесь положить данные "просто так", то естественно что у вас ничего хорошего не выйдет.

    Второе: При получении данных из БД необходимо выставить кодировку клиента. В php это делается с помощью mysql_query('set names utf8'); т.е. тем самым мы сообщаем БД что работаем в utf8 и хотим видеть данные именно в этой кодировке.

    Третье: сообщаем http-клиенту, что контент, который мы отдаем находится в кодировке UTF-8:
    header('Content-type ...');

    Если у вас проблема в первом, то остальное не имеет смысла
     
  9. Php-beginners

    Php-beginners Активный пользователь

    С нами с:
    25 фев 2010
    Сообщения:
    15
    Симпатии:
    0
    еще раз спасибо за исчерпывающий план - постараюсь победить эту проблему с кодировками

    я вообще-то до этого работал на NET-платформе
    там все просто - всегда и везде юникод - это изначальная задумка Win

    c PHP получается сложнее - тут все исторически унаследовано от юникосв, где работают в ANSI, а юникод появился гораздо позднее - и перенос с чисто юникосвого хостинга на win-хостинг - это да...
     
  10. Simpliest

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

    С нами с:
    24 сен 2009
    Сообщения:
    4.511
    Симпатии:
    2
    Адрес:
    Донецк
    Омг.

    Как бы исторически в юниксах KOI8-R, а cp-1251(который, если я правильно помню, как раз делался по стандарту ANSI) это Win
    И юникод в Win появился несколько позже 2000го года, а первая Win появилась в 84м что ли году.

    Но это так... лирика.
     
  11. topas

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

    С нами с:
    16 авг 2006
    Сообщения:
    2.258
    Симпатии:
    36
    Php-beginners
    Интересные у вас данные :)

    И не "кракозяблы", а "кракозябры". Используйте корректную терминологию :)
     
  12. Php-beginners

    Php-beginners Активный пользователь

    С нами с:
    25 фев 2010
    Сообщения:
    15
    Симпатии:
    0
    To Simpliest. Да вы правы, я нечетко эту мысль с кодировками сформулировал.
    Щас колдую с этими кодировками в этом портале. Хотелось бы до вечера их победить..