JackShcherbakov
@JackShcherbakov

Проблема с кодировкой строки, возвращаемой функцией strftime(). Как исправить?

Здравствуйте, коллеги! Недавно столкнулся со следующей проблемой:

Я хочу выводить все названия месяцев на русском языке. Для этого я написал вот такой сценарий:
<?php 
setlocale(LC_TIME, ''); // во 2-м аргументе "" для того, что бы использовалась локаль системы
echo strftime('%d %Bа %Y');
?>

А вот его результат:
23 ����а 2018 //а надо 23 марта 2018
По каким-то причинам, буквы м, а, р и т заменяются на �. В чем проблема? Как исправить?

Заранее выражаю огромную благодарность всем, кто поможет
UPD:
Это не помогло - www.cyberforum.ru/php-beginners/thread1135357.html
Скрипт
<?php 
setlocale(LC_TIME, 'ru_RU.UTF-8'); 
echo strftime('%d %Bа %Y');
?>

Выводит
23 Marchа 2018
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 2
@ksnk
Очевидно, что локаль по любому не подойдет, даже если чудесным образом удастся ее нащупать, просто потому, что требуется выводить "марта" вместо "март". Так что только хардкор
function toRusDate($daystr=null,$format="j F, Y г."){
    //print_r($datstr);
    if ($daystr) $daystr=strtotime($daystr);
    else $daystr=time();
    return	str_replace( //XXX: нужно проверить английские имена месяцев
        array('january','february','march','april','may','june','july',
            'august','september','october','november','december'),
        array('января','февраля','марта','апреля','мая','июня','июля',
            'августа','сентября','октября','ноября','декабря'),
        strtolower(date($format,
            $daystr)));
}
Ответ написан
@ilyale
То, что в браузере буквы выводятся не правильно, означает:
1) браузер открыл страницу, на которой не верно установлена кодировка (что-то наподобие header('Content-Type: text/html; charset=utf-8')). Если кодировка установлена правильно, но проблема продолжает проявляться, см п. 2
2) причиной может быть то, что РНР уже получил информацию в битой кодировке и он не может ее нормально отдать браузеру. в этом случае нужно искать причину в источнике информации
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы