Ошибка строковые функции strtoupper и strtolower работают некорректно

 

Пользователь 230117

Посетитель

Сообщений: 87
Баллов: 7
Регистрация: 04.12.2013

andyzee

#1

0

22.05.2014 13:32:36

Проверка системы ругается на
«Параметры настройки UTF (mbstring и константа BX_UTF) Ошибка! Строковые функции работают некорректно»
и предупреждает что могут возникать ошибки в неожиданных местах. Так как натолкнулся на несколько странных багов, подозреваю это одна из проблем.
Если кто-нибудь сталкивался и осилил решить, подскажите, пожалуйста, как именно (кроме чистой новой установки, разумеется).

dbconn.php:

Код
...      
define("BX_UTF", true); 
...

phpinfo() :

Код
Directive   Local Value   Master Value
mbstring.func_overload   2   2
mbstring.internal_encoding   UTF-8   no value
...
 

Пользователь 230117

Посетитель

Сообщений: 87
Баллов: 7
Регистрация: 04.12.2013

andyzee

#2

1

22.05.2014 18:32:06

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

Код
mb_internal_encoding('utf-8'); 

в php_interface/init.php

 
 

Не помогло!

Любая форма искусства — это обман!

 
 
 

а тут помогите расшифровать что не так

сверлим дрелью задний проход кровь кишки битрикс сапорт
Арын дын дын дын, арын дын дын
Бум шакалака

 

Пользователь 102760

Посетитель

Сообщений: 36
Баллов: 5
Регистрация: 27.09.2011

#8

0

03.10.2019 11:06:53

У меня возникла такая же проблема: при проверке сайта появилось сообщение:

Код
Параметры настройки UTF (mbstring и константа BX_UTF)  Ошибка! Строковые функции strtoupper и strtolower работают некорректно

Сайт работает в однобайтовой кодировке, phpinfo выдает:

Код
default_charset         cp1251   cp1251
.....
mbstring.func_overload  0        0

Подскажите как исправить эту ошибку

 

А какая версия php стоит?

 

Пользователь 102760

Посетитель

Сообщений: 36
Баллов: 5
Регистрация: 27.09.2011

#10

0

04.10.2019 09:20:35

Цитата
Евгений Ляхов написал:
А какая версия php стоит?

PHP Version 7.1.30

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


ТОЛЬКО для сайтов в кодировке WINDOWS-1251 (CP1251)

Проверка

echo strtoupper("ёпрст");

Должно вернуть ЁПРСТ, а возвращает ёпрст

Исправление на веб окружении битрикс:

установить русскую локаль для букв и стандартную локаль для чисел в /home/bitrix/ext_www/ваш сайт.рф/bitrix/php_interface/dbconn.php

setlocale(LC_ALL, 'ru_RU.CP1251');
setlocale(LC_NUMERIC,'C');

Если русская локаль ru_RU.CP1251 на самом сервере не установлена то делаем следующее

1. Проверяем локали из-под root (CentOs)

2. Устанавливаем если не стоят

localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

3. Тестируем

4. Перезапускаем сервис httpd

service httpd restart

Назад в раздел

Подписаться на новые материалы раздела:

Почему появляется ошибка?

На сервере некорректно настроена локаль. Обычно ошибка появляется только для сайтов, работающих на кодировке windows-1251.

Как исправить ошибку?

Если сайт работает на кодировке windows-1251, необходимо в SSH-консоли выполнить данный код:

localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

После этого в файле /bitrix/php_interface/dbconn.php добавить следующие строки:

setlocale(LC_ALL, 'ru_RU.CP1251');
setlocale(LC_NUMERIC, 'C');

Кроме того, следует убедиться, что для сайта выставлены правильные значения PHP-параметров:

  • default_charset = cp1251
  • mbstring.internal_encoding = cp1251
  • mbstring.func_overload = 0

После этого необходимо перезапустить сервер Apache:

service httpd restart

Требуется наша помощь?

Мы имеем огромный опыт, на протяжении почти 15 лет помогая клиентам в решении самых различных проблем на их сайтах, в т.ч. самых сложных.

Поэтому, если Вы не имеете возможности решить эту проблему самостоятельно, обращайтесь к нам — мы поможем.

Ошибка возникает на сайтах в однобайтовой кодировке. Тестовый скрипт:

<?php echo strtoupper("абвгд"); ?>

должен вернуть АБВГД, а возвращает абвгд.

Исправление: установить русскую локаль для букв и стандартную локаль для чисел в dbconn.php

setlocale(LC_ALL, 'ru_RU.CP1251');
setlocale(LC_NUMERIC,'C');

Локаль ru_RU.CP1251 должна быть установлена на сервере, можно проверить командой:

locale -a | grep ru_RU

Если не установлена, нужно установить:

Только для CentOS 8 — установить пакет с локалями:

dnf install glibc-locale-source

Установить саму локаль:

localedef -c -i ru_RU -f CP1251 ru_RU.CP1251

Проверить установку локали:

locale -a | grep ru_RU

Перезапустить веб-сервер Apache/Httpd:

systemctl restart httpd


2021-11-08 11:54

CMS
Веб-серверы

  • Главная

  • Сниппеты



  • Строковые функции strtoupper и strtolower работают некорректно



Когда сайт на битриксе работает в однобайтовой кодировке(cp1251), при тестировании конфигурации возникает ошибка.

Чтобы устранить ошибку, установите русскую локаль для букв и стандартную локаль для чисел в dbconn.php


setlocale(LC_ALL, 'ru_RU.CP1251');
setlocale(LC_NUMERIC,'C');

Теги: setlocale, cp1251


Понравилась статья? Поделить с друзьями:
  • Ошибка субару b0201
  • Ошибка стояночного тормоза volkswagen пассат сс
  • Ошибка строка не распознана как действительное значение datetime
  • Ошибка соединения 0x4803 kyocera smtp
  • Ошибка стояночного тормоза w221