За последние 24 часа нас посетили 16847 программистов и 1702 робота. Сейчас ищут 839 программистов ...

Сессия, кодировки и Internet Explorer

Тема в разделе "PHP для новичков", создана пользователем Maba, 19 мар 2008.

  1. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    Здравствуйте!

    У меня возникла следующая проблема. Имеется php-скрипт, который записывает в $_SESSION некоторую информацию в utf-8. Другой скрипт читает $_SESSION и выводит результаты в виде таблицы.


    PHP:
    1. <?
    2. $code=$_GET['code'];
    3. $price=$_GET['price'];
    4. $name=$_GET['name'];
    5. $amount=$_GET['amount'];
    6. if(isset($_SESSION['cart_count']))
    7.     $_SESSION['cart_count']++;
    8. else
    9. {
    10.     $_SESSION['cart_count']=1;
    11.     $_SESSION['cart']=array();
    12. }
    13.        
    14.     $_SESSION['cart'][$_SESSION['cart_count']]=array('code'=>$code,'name'=>$name,'price'=>$price, 'amount'=>$amount);
    15. ?>
    PHP:
    1. <?
    2. ...
    3. foreach($_SESSION['cart'] as $k=>$pos)
    4. {
    5.     echo("<TR>");
    6.     echo("<TD>");
    7.     echo($k);
    8.     echo("</TD>");
    9.     echo("<TD>");
    10.     echo($pos['name']);
    11.     echo("</TD>");
    12.     echo("<TD>");
    13.     echo($pos['code']);
    14.     echo("</TD>");
    15.     echo("<TD align=\"right\">");
    16.     echo($pos['price']);
    17.     echo("</TD>");
    18.     echo("<TD align=\"right\">");
    19.     echo($pos['amount']);  
    20.     echo("</TD>");
    21.     echo("</TR>");
    22.     $sum+=$pos['price']*$pos['amount'];
    23. }
    24. ...?>


    При обращении к скрипту через IE6 или IE7 поле $pos['name'] выводится квадратиками (там запись на русском). К полю $pos['code'] в начало добавляется знак "?". В остальных браузерах такой лажи не наблюдается. Изменение кодировок в браузере ничего не даёт - по прежнему квадратики. Все файлы в UTF-8, а в отдаваемой странице содержится:

    HTML:
    1. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />


    С чем это может быть связано, и как это побороть? Спасибо.
     
  2. Nazorei

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

    С нами с:
    1 фев 2007
    Сообщения:
    228
    Симпатии:
    0
    сохрани скрипт в utf
    или header вначале скрипта в utf
     
  3. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0

    Извините. Даже если не читать этого:
    То как понять

    Какой хедер? В начале какого из двух скриптов?
     
  4. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    И простите мне моё любопытство, тот кто переместил тему в форум для новичков, очевидно, посчитал вопрос очень простым? Могу я в таком случае попросить поделиться решением?
     
  5. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
    вот только не надо начинать…

    файлы сохранены в кодировке utf-8 без BOM?
    в какой кодировке отдаёт файлы апач? если не юкод, то перед вызовами скриптов надо header('Content-Type: text/html; charset=utf-8');
     
  6. RomanBush

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

    С нами с:
    5 дек 2007
    Сообщения:
    798
    Симпатии:
    0
    Адрес:
    200 км от Москвы
    В каком форуме сидит письмо - не важно. Главное, чтобы ответили.
    Вопрос:
    Если на отдаваемой странице, в IE нажать "просмотр в виде html" - там в какой кодировке будет инфа?
    И ещё вопрос - а експлорер именно автоматически разпознаёт эту страницу как utf-8 ? Или иногда может ошибаться?
    И ещё - это всё на хостинге происхожид или на рабочем компе?
     
  7. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    Были сохранены с BOM. Сейчас попробую переделать. А этот хедер нужен несмотря на наличие указанной meta?
     
  8. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    В юникоде. Эксплорер автоматически распознаёт как юникод, вроде не ошибается. Это происходит как на рабочем компе, так и на хостинге. Кроме этого случая, ни разу никаких проблем с кодировкой замечено не было.
     
  9. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    Вот, кстати, ещё какой момент. Может быть это важно. К первому скрипту я обращаюсь посредством AJAX-запроса. Может быть Microsoft.XMLHTTP отправляет запрос как-нибудь иначе, и поэтому в остальных браузерах всё нормально?
     
  10. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    Сейчас внимательно посмотрел в то, что получает IE. Получается, что весь файл закодирован в utf-8, а проблемная строчка - в ANSI.
     
  11. Luge

    Luge Старожил

    С нами с:
    2 фев 2007
    Сообщения:
    4.680
    Симпатии:
    1
    Адрес:
    Минск
  12. Maba

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

    С нами с:
    3 окт 2007
    Сообщения:
    18
    Симпатии:
    0
    Проблема в том, что XMLHttpRequest отправляет get-запрос в utf-8, а Microsoft.XMLHTTP - в ANSI. Поэтому стал бы вопрос об определении браузера на стороне сервера... А это большая возня...

    Решил проблему проще. Стал отправлять запрос POST-ом, а перед вызовом Request.send дописал:

    [js]Request.setRequestHeader("Content-Type","application/x-www-form-urlencoded; charset=utf-8");[/js]

    Так работает хорошо. Всем большое спасибо :)