вторник, 1 июля 2014 г.

Это не проблема с кодировкой

Столкнулся однажды с такими результатами вывода на экран переменной php-скрипта:


Вот часть того скрипта, использующего класс системы Bitrix:
$res = CIBlockElement::GetList(
    Array("SORT"=>"ASC"),
    Array("IBLOCK_ID" => IBLOCK_AUTOFILL_GROUP_ID),
    false,
    false,
    Array("ID", "IBLOCK_ID", "NAME", "DATE_ACTIVE_FROM","PROPERTY_*")
);

while($ob = $res->GetNextElement()){
    $arFields = $ob->GetFields();
    //Вываодим переменную на экран
    echo $arFields['NAME'];
}

Чтобы браузер отобразил корректно русский текст, нужно ему помочь. В Firefox это делается так:


 После этого данные нашего echo отобразятся правильно:


В чем причина произошедшего?
Браузер не определил корректно кодировку по следующим причинам:
- не были переданы заголовки о кодировке;
- данные выводились на пустой странице без тега <meta charset="utf-8">.
Я попробовал добавить в вывод страницы указанный тег:
//Указываем тег кодировки
echo '<html><head><meta charset="utf-8"></head><body>';

while($ob = $res->GetNextElement()){

    echo '<pre>';
    $arFields = $ob->GetFields();
    echo $arFields['NAME'];
    echo '</pre>';
}
    
//Завершаем html-документ
echo '</body></html>';

Это привело к правильному отображению русских букв, поскольку браузер смог корректно определить кодировку благодаря наличию тега <meta charset="utf-8">

Комментариев нет:

Отправить комментарий