ShARV1
10.04.2014 - 11:33
Есть сайт на CP1251. Сервер был настроен хорошо, всё работало правильно.
При переезде на новый сервер отвалились все строковые функции для русских символов.
Странно то, что в браузере - строковые функции работают, а при запуске скрипта через терминал - он начинает чудить.
Вот простой пример:
$a = "МоЙ БоЛьШоЙ ТексТ";
echo $a;
echo strlen($a);
echo strtolower($a);
В браузере всё отрабатывает хорошо, и получается следующее
Цитата |
МоЙ БоЛьШоЙ ТексТ 17 мой большой текст |
Он и длину считает и к регистру приводит.
Если тоже самое запустить через терминал, то в консоль/файл он выведет следующее
Цитата |
МоЙ БоЛьШоЙ ТексТ 8 |
Т.е. и длину посчитал неправильно и при измнеении регистра срезал строку.
функции MB_* не работают, в некоторых случаях помогает iconv_*, но это не выход. Хотелось бы восстановить правильную работу сервера.
Не имею опыта настраивать сервера, поэтому прошу мне помочь, что может быть не так.
P.S. Если кому будет полезно - стоит виртуальная машина Битрикса.
Заранее спасибо!
bestxp
10.04.2014 - 11:47
если нет mb_* тогда установи их)
ShARV1
10.04.2014 - 11:52
они есть, но они работают аналогично обычным строковым.
К тому же целое ядро CMS написано на обычных функциях, поэтому этот путь решения тоже не подходит
Игорь_Vasinsky
10.04.2014 - 12:19
в .htaccess Добавь строку
AddDefaultCharset WINDOWS-1251
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ShARV1
10.04.2014 - 12:29
Цитата (Игорь_Vasinsky @ 10.04.2014 - 12:19) |
в .htaccess Добавь строку |
Уже было сделано, даже пытался добавлять вот такую строчку
Цитата |
AddCharset WINDOWS-1251 .cp-1251 .win-1251 |
Но результат всё равно не меняется.
.htaccess же не может кешироваться, достаточно его просто сохранить, чтобы изменения вступили в силу?
Игорь_Vasinsky
10.04.2014 - 12:30
если ты роботаешь в ANSII -то данные с которыми ты работаешь должны быть в ANSII
и тогда не нужно ни mb_ ни iconv()
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
ShARV1
10.04.2014 - 12:36
Цитата (Игорь_Vasinsky @ 10.04.2014 - 12:30) |
если ты роботаешь в ANSII -то данные с которыми ты работаешь должны быть в ANSII
и тогда не нужно ни mb_ ни iconv() |
Я для теста создаю файл с кодировкой Windows-1251.
В нем создаю переменную текстовую(она соответственно тоже 1251) и пытаюсь с ней что-то проделать.
При запуске в браузере без подключения стандартных файлов CMS, в браузере тоже выводится лабуда вместо русского текста. Т.о. я полагаю, что при запуске CMS он формирует какие-то HTTP заголовки для корректного отображения CP1251, а в терминале этих заголовков нет, и он пытается работать с UTF, в итоге я получаю то, что получаю.
Кроме AddDefaultCharset есть какая-то директива, которая может устанавливать кодировку?
Игорь_Vasinsky
10.04.2014 - 13:11
после
<?php
напиши
header("Content-Type: text/html; charset=windows-1251");
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
10.04.2014 - 13:15
setlocale(LC_ALL, 'ru_RU.CP1251');
ShARV1
10.04.2014 - 13:20
Цитата (Игорь_Vasinsky @ 10.04.2014 - 13:11) |
после
<?php
напиши
header("Content-Type: text/html; charset=windows-1251"); |
Не помогло. Это актуально писать, если запуск происходит из браузера.
Я же запускаю из терминала командой "php -q /_tests/test_string.php"
ShARV1
10.04.2014 - 13:22
Цитата (killer8080 @ 10.04.2014 - 13:15) |
setlocale(LC_ALL, 'ru_RU.CP1251'); |
к сожалению тоже безрезультатно.
Игорь_Vasinsky
10.04.2014 - 13:49
ну осталось тока тут httpd.conf если апач
_____________
HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, (TSql, BI OLAP, MDX), Mongo, Git, SVN, CodeIgnater, Symfony, Yii 2, JiRA, Redmine, Bitbucket, Composer, Rabbit MQ, Amazon (SQS, S3, Transcribe), Docker
killer8080
10.04.2014 - 14:41
Цитата (ShARV1 @ 10.04.2014 - 13:22) |
к сожалению тоже безрезультатно. |
а так?
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
ShARV1
10.04.2014 - 14:54
Цитата (killer8080 @ 10.04.2014 - 14:41) |
а так?
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251'); |
Одинаково.
Мне кажется должна быть какая-то настройка в httpd.conf, которая всё исправит.
killer8080
10.04.2014 - 14:58
ShARV1посмотри доступные локали в системе, в консоли команда
locale -a
выборка по русским локалям
locale -a | grep ru
Быстрый ответ:
Powered by dgreen
Здесь расположена полная версия этой страницы.