[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Не работают строковые функции
Страницы: 1, 2
ShARV1
Есть сайт на CP1251. Сервер был настроен хорошо, всё работало правильно.
При переезде на новый сервер отвалились все строковые функции для русских символов.

Странно то, что в браузере - строковые функции работают, а при запуске скрипта через терминал - он начинает чудить.

Вот простой пример:

$a = "МоЙ БоЛьШоЙ ТексТ";
echo $a;
echo strlen($a);
echo strtolower($a);


В браузере всё отрабатывает хорошо, и получается следующее
Цитата
МоЙ БоЛьШоЙ ТексТ
17
мой большой текст


Он и длину считает и к регистру приводит.

Если тоже самое запустить через терминал, то в консоль/файл он выведет следующее
Цитата
МоЙ БоЛьШоЙ ТексТ
8

Т.е. и длину посчитал неправильно и при измнеении регистра срезал строку.

функции MB_* не работают, в некоторых случаях помогает iconv_*, но это не выход. Хотелось бы восстановить правильную работу сервера.

Не имею опыта настраивать сервера, поэтому прошу мне помочь, что может быть не так.

P.S. Если кому будет полезно - стоит виртуальная машина Битрикса.

Заранее спасибо!
bestxp
если нет mb_* тогда установи их)
ShARV1
они есть, но они работают аналогично обычным строковым.
К тому же целое ядро CMS написано на обычных функциях, поэтому этот путь решения тоже не подходит
Игорь_Vasinsky
в .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
Цитата (Игорь_Vasinsky @ 10.04.2014 - 12:19)
в .htaccess Добавь строку

Уже было сделано, даже пытался добавлять вот такую строчку
Цитата
AddCharset WINDOWS-1251 .cp-1251  .win-1251


Но результат всё равно не меняется.

.htaccess же не может кешироваться, достаточно его просто сохранить, чтобы изменения вступили в силу?
Игорь_Vasinsky
если ты роботаешь в 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
Цитата (Игорь_Vasinsky @ 10.04.2014 - 12:30)
если ты роботаешь в ANSII -то данные с которыми ты работаешь должны быть в ANSII

и тогда не нужно ни mb_ ни iconv()

Я для теста создаю файл с кодировкой Windows-1251.
В нем создаю переменную текстовую(она соответственно тоже 1251) и пытаюсь с ней что-то проделать.
При запуске в браузере без подключения стандартных файлов CMS, в браузере тоже выводится лабуда вместо русского текста. Т.о. я полагаю, что при запуске CMS он формирует какие-то HTTP заголовки для корректного отображения CP1251, а в терминале этих заголовков нет, и он пытается работать с UTF, в итоге я получаю то, что получаю.

Кроме AddDefaultCharset есть какая-то директива, которая может устанавливать кодировку?
Игорь_Vasinsky
после

<?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
setlocale(LC_ALL, 'ru_RU.CP1251');
ShARV1
Цитата (Игорь_Vasinsky @ 10.04.2014 - 13:11)
после

<?php

напиши

header("Content-Type: text/html; charset=windows-1251");

Не помогло. Это актуально писать, если запуск происходит из браузера.
Я же запускаю из терминала командой "php -q /_tests/test_string.php"
ShARV1
Цитата (killer8080 @ 10.04.2014 - 13:15)
setlocale(LC_ALL, 'ru_RU.CP1251');

к сожалению тоже безрезультатно.
Игорь_Vasinsky
ну осталось тока тут 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
Цитата (ShARV1 @ 10.04.2014 - 13:22)
к сожалению тоже безрезультатно.

а так?
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');
ShARV1
Цитата (killer8080 @ 10.04.2014 - 14:41)
а так?
setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');

Одинаково.
Мне кажется должна быть какая-то настройка в httpd.conf, которая всё исправит.
killer8080
ShARV1
посмотри доступные локали в системе, в консоли команда
locale -a 

выборка по русским локалям
locale -a | grep ru

Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2025 Invision Power Services, Inc.