mbstring func overload что это

Изменение mbstring.func_overload и internal_encoding

Наши клиенты, установив одну из популярных систем управления сайтом, сталкивались с тем, что данная CMS требовала изменить стандартные настройки параметров PHP mbstring.func_overload и mbstring.internal_encoding.

В частности, система требует прописать настройки:

Почему не меняются mbstring.func_overload и internal_encoding?

Как изменить mbstring.func_overload и internal_encoding?

Изменить настройки mbstring.func_overload и mbstring.internal_encoding в современных конфигурациях можно несколькими способами, но до этого потребуется определиться с тем, какой услугой Вы пользуетесь (хостинг с php, VDS или сервер) и режимом работы php.

Если с первым вопросом проблем не возникнет, то с режимом php несколько сложнее. Узнать о режиме работы можно из функции phpinfo, найдя строку: «Server API», где может быть указано «Apache … Handler» или иное. Значение «Apache … Handler» укажет нам на то, что PHP работает в режиме mod_php, иное значение укажет на режим CGI или аналогичный.

Изменение настроек для режима mod_php

Изменение mbstring.func_overload и mbstring.internal_encoding в режиме модуля Apache на хостинге с PHP можно выполнить, только обратившись в техническую поддержку хостинга.

При использовании своего сервера (VPS/VDS или контейнера) достаточно будет внести изменения в настройки файла httpd.conf в секцию VirtualHost сайта, для которого вносятся изменения, где указать:

Изменение настроек для PHP в иных режимах

Изменить mbstring.func_overload и mbstring.internal_encoding в иных режимах, таких как: CGI, FastCGI и т.д., доступно, как на обычном хостинге, так и на собственном VDS или сервере.

В этом режиме изменение можно произвести простой модификацией пользовательского файла php.ini, где следует указать:

Универсальный метод изменения настроек

Мы сталкивались с конфигурациями систем, на которых отсутствовала возможность изменить параметры mbstring.func_overload и mbstring.internal_encoding, указанными выше методами.

В этом случае для хостинга единственным методом решения проблемы будет обращение в техническую поддержку.

Источник

Ошибка: Удалите настройку PHP mbstring.func_overload

При обновлении коробочной версии Битрикс24 вы можете получить уведомление: Для обновления продукта необходимо удалить настройку PHP mbstring.func_overload. Пожалуйста, внесите необходимые изменения или обратитесь в службу технической поддержки вашего хостинга.

Что это значит

Функционал mbstring.func_overload объявлен устаревшим, начиная с PHP 7.2.0, и его использование крайне не рекомендовано.

В связи с этим в продуктах «1С-Битрикс» прекращается поддержка данного параметра PHP. Вы не сможете установить обновления продукта, пока вы не удалите этот параметр в конфигурации PHP вашего сервера.

Что делать

Перейдите в административном меню в раздел Настройки → Инструменты → Диагностика → Настройки PHP:

В открывшем окне найдите в настройках PHP параметр mbstring.func_overload :

Если его значение не равно 0, то вам нужно удалить этот параметр в конфигурации PHP сервера или выставить равным 0 ( mbstring.func_overload=0 ).

Чтобы выполнить эти рекомендации, вам нужно обратиться к вашему системному администратору или хостинг-провайдеру.

Читайте также:  какой массаж делают грудью

То же самое можно сделать и вручную в VMBitrix:

Источник

Функции мультибайтных строк

mbstring обеспечивает эти многобайтовые определенные строковые функции, которые помогают Вам иметь дело с многобайтовым кодированием в PHP, который, как предполагается, используется с единственным(отдельным) кодированием байта. В дополнение к этому, mbstring обрабатывает символ, кодирующий преобразование между возможными парами кодирования.

mbstring также предназначен, чтобы обработать кодирование на основе UTF-8 и UCS-2 и других (смотрите ниже), так как mbstring был первоначально разработан для использования в японских web-страницах.

Требования Кодировки Символов PHP4

Вот примеры внутренней кодировки символов, которые работают и НЕ работают с PHP.

Примечание: SJIS не должна использоваться для внутреннего кодирования, если читатель не знаком достаточно хорошо с вопросами работы разборщика/компилятора и кодирования символов.

Примечание: Если вы используете БД с PHP, рекомендуется использовать одну кодировку для БД и internal encoding/внутреннего кодирования для облегчения использования и повышения производительности.

Если вы используете PostgreSQL, он поддерживает кодировки символов, которые отличаются от backend-кодировки. См. детали в учебнике PostgreSQL.

Следующие опции конфигурации имеют отношение к модулю mbstring:

Конвертация кодировки символов HTTP-ввода/вывода может конвертировать также двоичные данные. Пользователям предлагается контролировать конвертацию кодировки символов, если бинарные данные используются для ввода/вывода HTTP.

Пример 1. Отключение конвертации символов HTTP-ввода в php.ini

Примечание: Для пользователей PHP3-i18n: конвертация вывода mbstring отличается от PHP3-i18n. Кодировка символов конвертируется с использованием буфера вывода.

Пример 2. Установки php.ini

Пример 3. Пример скрипта

Вот кодировки, поддерживаемые данным расширением PHP:

Если » pass » установлено, никакая конвертация кодировки символов не выполняется.

Если » auto » установлено, оно расширяется до » ASCII,JIS,UTF-8,EUC-JP,SJIS «.

Примечание: «Поддерживаемые кодировки символов» не означает, что это работает как внутренний код символа.

Приводим значения по умолчанию, устанавливаемые в php.ini

Директива Значение по умолчанию
mbstring.language «neutral»
mbstring.detect_order NULL
mbstring.http_input «pass»
mbstring.http_output «pass»
mbstring.internal_encoding NULL
mbstring.script_encoding NULL
mbstring.substitute_character NULL
mbstring.func_overload «0»
mbstring.encoding_translation «0»


mbstring.internal_encoding определяет внутреннюю кодировку символов по умолчанию

mbstring.http_input определяет кодировку символов по умолчанию HTTP-ввода

mbstring.http_output определяет кодировку символов по умолчанию HTTP-вывода

mbstring.detect_order определяет порядок определения кодировки символов по умолчанию. См. также mb_detect_order()

mbstring.substitute_character определяет символы для замещения неправильных кодировок символов

Web-браузерам предлагается использовать ту же кодировку при отправку форм. Однако браузеры могут не использовать ту же кодировку символов. См. mb_http_input() для определения кодировки браузера.

Если enctype имеет установленное значение multipart/form-data в HTML-формах, mbstring не конвертирует кодировку символов в POST-данных. Пользователь обязан сделать это в скрипте, если конвертация нужна.

Одновременно браузеры достаточно наворочены, чтобы определять кодировку символов в HTML. charset лучше установить в HTTP-шапке/header. Измените default_charset в соответствии с кодировкой символов.

Пример 4. Установки php.ini

Пример 5. Установки php.ini для пользователей EUC-JP

Пример 6. Установки php.ini для пользователей SJIS

Перегрузка/Overload строковых функций PHP mbstring-функциями с поддержкой многобайтных символов

Многобайтное расширение (mbstring) имеет строковые РНР-функции с поддержкой многобайтных символов (например, substr() поддерживает mb_substr() ).

Таблица 1. Перегружаемые функции

значение mbstring.func_overload функция-оригинал перегруженная функция
1 mail() mb_send_mail()
2 strlen() mb_strlen()
2 strpos() mb_strpos()
2 strrpos() mb_strrpos()
2 substr() mb_substr()
4 ereg() mb_ereg()
4 eregi() mb_eregi()
4 ereg_replace() mb_ereg_replace()
4 eregi_replace() mb_eregi_replace()
4 split() mb_split()

Для хранения символа можно использовать до 6 байтов.

Некоторые кодировки определяют shift(escape)-последовательность для входа/выхода в/из многобайтных строк.

ISO-2022-JP обязан использоваться для SMTP/NNTP.

«i-mode» web-сайт предполагается использовать с SJIS.

Многобайтные кодировки и связанные с ними вопросы очень сложны. Невозможно рассмотреть их здесь достаточно подробно. Дополнительно просмотрите следующие ресурсы.


информация о символах Japanese/Korean/Chinese

Источник

Mbstring func overload что это

Scenario: The default_charset is KOI8-R, and there is a text file «input.txt» containing the string «Это текст для поиска.» in KOI8-R encoding.

A PHP script is written:
// mb_internal_encoding(‘KOI8-R’);

$data = file_get_contents ( ‘input.txt’ );

?>
But unfortunately it was saved as UTF-8.

It doesn’t work; mb_strpos() returns false because it can’t find the UTF-8-encoded «текст» inside the KOI8-R-encoded «Это текст для поиска.».

Adjusting the default_charset had no effect. Not even fiddling with mb_internal_encoding could fix it, simply because the strings involved had *different* encodings and without actually changing one of them they just weren’t going to match.

Either re-save the source file as KOI8-R to match the data file, or re-save the data file as UTF-8 to match the source code. Only then will the script properly echo ‘4’.

The documentation is vague, on WHAT precisely the valid «NLS» language strings are that are valid for «mbstring.language».

( mb_language () ); // «neutral» (default if not set)
var_dump ( mb_language ( ‘uni’ ) ); // TRUE, valid language string
var_dump ( mb_language () ); // «uni»
var_dump ( mb_language ( ‘neutral’ ) ); // TRUE, valid language string
var_dump ( mb_language () ); // «neutral»
?>

Note that you should better at least set «mbstring.internal_encoding».

Just check as below:

?>

You might be surprised at unexpected values.

mbstring.language Japanese
;mbstring.internal_encoding (commented out showing «no value» in phpinfo() )

These two lines in «php.ini» are the same values as

in Win / Linux servers.

«mbstring.internal_encoding» defines the default encoding for «mb_» Functions such as «mb_strlen()».

It also defines the same for «mb_ereg_» Functions such as «mb_ereg()» when you don’t set «mb_regex_encoding».

Источник

Где и как можно исправить ситуацию.

Извините за неграмотность.

php_value mbstring.func_overload 0
mbstring.internal_encoding=ISO-8859-1

В русской раскладке всё заработает корректно. Перезагружать сервер не обязательно.

я забил. у меня поставилось. в инет магазине почта не отправляется, не пойму почему. Возможно изза этого.

ps. нет, не изза этого. конфиг этот подправил, все равно не отправляется(причем только при при оформлении заказа в инет магазине)
p.p.s. Почта отправлялась изза того что не хватало памяти. Перешли на тариф с 192 ОЗУ и все заработало.
а если выставлять mbstring = 0, единственный глюк что я нашел:

при включенном режиме правки, пытаемся редактировать параметры компонента, высвечивается окно которое должно быть с параметрами, и в нем сообщение:
«Не удалось обнаружить код вызова компонента.» Приходится править параметры компонента либо в исходнике(в коде вызова компонента), либо через визуальный редактор страницы.

Нет этой строки /etc/php.d/mbstring.ini:
Нельзя ли все это как то решить, раз и навсегда? У разного хостера одно и тоже? и везде надо все подписывать и дописывать?

Цитата
КОМАН СТИНС написал:
Можно mbstring.func_overload изменить «Местечково» например только для заданной папки где у вас работает скрипт требующий ее отключения. Делается на сервере под апачем тут etc/apache2/conf.d/httpd.conf, для виртуальной машины битрикс тут etc/httpd/conf/httpd.conf. Добавляем строки например для папки /personal/promo/

php_admin_value mbstring.func_overload 0

Как быть в ситуации когда надо его отключить для собственных печатных форм магазина?
Сами печатные формы лежат в /bitrix/admin/reports, но вызов происходит /bitrix/admin/sale_print.php. соответственно чтобы отключить mbstring.func_overload надо добавить

php_admin_value mbstring.func_overload 0

но в этой папке лежит много другого и результат может быть непредсказуемым

Цитата
Евгений Крохин написал:
На дворе конец 17-го, разрабы всё так-же оставляют этот скелет в шкафу, обосновавшийся там ещё времен безнадежно устаревшей кодировки, и даже мизинцем повести не желают. Это аргумент в «пользу».
Цитата
да прям вообще «трагедия века».
с учетом того что предоставляется готовое окружение и куча хостеров у которых одной кнопкой можно настроить совместимость сайта с bitrix

«Уважаемый», не говорите глупостей, чтобы не вам не сказали куда надо пойти.

Во вторых у меня на DEV-сервере крутится куча проектов, который я настраивал под свои нужды в то время, когда ещё ни кто не знал про Битрикс, и уже в то время всё прекрасно работало на UTF-8 безо всяких «сопель». И только Битрикс требует к себе подобного «внимания», сказать, что это настораживает, значит не сказать ни чего.

Данный функционал объявлен УСТАРЕВШИМ начиная с PHP 7.2.0 и его использование крайне не рекомендовано.

Ну т.е. такое. платная, недешевая система вот с такой вот детской болезнью.

В связи с обновлением многие будут искать, оставлю инструкцию что делать:

Источник

Сказочный портал