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 'какой-то текст на русском';
Источники
Афоризм дня:
Мужество – добродетель, в силу которой люди в опасностях совершают прекрасные дела. (531)
Leave a reply