PHP

Русские буквы в консоли на PHP

Проблема: при выводе кириллицы из PHP-скрипта в консоль выводятся всякие кракозябры типа IBM866 / cp1251.

Рассмотрим разные кейсы:

1 JetBrains IDE + Docker/Windows

  • Help - Edit custom VM options - Добавить строки:
    -Dfile.encoding=UTF-8
    -Dconsole.encoding=UTF-8
  • Editor - General - Console - Default encoding - поставить UTF-8
  • Restart PHPStorm 
  • Profit!

2 Docker/Debian

RUN \
    apt-get update && apt-get install -y \
    locales

# Locale
RUN sed -i -e \
  's/# ru_RU.UTF-8 UTF-8/ru_RU.UTF-8 UTF-8/' /etc/locale.gen \
   && locale-gen

ENV LANG ru_RU.UTF-8
ENV LANGUAGE ru_RU:ru
ENV LC_LANG ru_RU.UTF-8
ENV LC_ALL ru_RU.UTF-8

# +Timezone (если надо на этапе сборки)
ENV TZ Europe/Moscow
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

3 Docker/Alpine

# Add locales to your Alpine
ENV MUSL_LOCALE_DEPS musl-dev gettext-dev libintl
ENV MUSL_LOCPATH /usr/share/i18n/locales/musl
ENV LANG=ru_RU.UTF-8 \
    LANGUAGE=ru_RU.UTF-8

RUN cd /tmp \
    && apk add --virtual .build-deps cmake make wget git
    && apk add \
    $MUSL_LOCALE_DEPS \
    && wget https://gitlab.com/rilian-la-te/musl-locales/-/archive/master/musl-locales-master.zip \
    && unzip musl-locales-master.zip \
    && cd musl-locales-master \
    && cmake -DLOCALE_PROFILE=OFF -D CMAKE_INSTALL_PREFIX:PATH=/usr . && make && make install \
    && cd .. && rm -r musl-locales-master \
    #
    && apk del .build-deps

4 Windows ONLY

  • пункт 1 этой статьи может быть достаточно, попробуйте

или

<?php
// КОДИРОВКА В КОТОРОЙ НАПИСАН СКРИПТ
ini_set('default_charset', 'UTF-8');
mb_internal_encoding('UTF-8'); 

// ВЫВОДИТЬ НА КОНСОЛЬ
mb_http_output('IBM866');
ob_start("mb_output_handler"); 

echo 'какой-то текст на русском';

или

<?php

exec("chcp 65001");

echo 'какой-то текст на русском';

 

 

 

Источники

 

 

Афоризм дня:
Мужество делает ничтожными удары судьбы. (529)

Leave a reply