LEOnidUKG

LEOnidUKG
Рейтинг
1776
Регистрация
25.11.2006
Должность
PHP
Интересы
Программирование
'[umka:
;12248113']Я заглянул в маны, там написано, что "intl.default_locale" — это для intl-функций. То есть, не для регэкспов :)
Может быть, поможет вот это:
http://php.net/manual/en/locale.setdefault.php

Пробовал не помогает. НО в любом случаи, где это надо было бы всё прописывать? Правильно в php файле :)

Ладно. Пусть всё это лежит, тут. Мож кто с поиска заглянет.

Легче указать локаль и забыть или использовать utf-8 и не париться.

edogs:
но в php 5.4 (и возможно 5.3 даже, не помним) по умолчанию идет не пустой аргумент, а utf-8

echo setlocale(LC_ALL, 0);

Выводит C

т.е. пустоту.

---------- Добавлено 17.10.2013 в 18:01 ----------

Ladycharm:
http://phpclub.ru/talk/threads/utf8-%D0%B8-preg_replace.52495/#post-452852
В PCRE последовательности (\b, \B, \d, \D, \s, \S, \w, and \W) работают с кодами символов <256 (для повышения производительности).
Использование флага /u решает проблему.

Да при чём тут флаг? Мы говорим, как локалку установить. Если её прописать, то и \b начитает отлично работать. А про UTF-8 и так всё понятно, что с ним всё работает.

---------- Добавлено 17.10.2013 в 18:07 ----------

Вообще есть вариант, что в PHP 5.2.17 это всё таки была политика и в ней если не указана локаль бралась системная. А теперь в 5.3 и выше убрали такую вольность.

siv1987:
Не сказать. Напишите тогда багрепорт

Да просто intl.default_locale НИКАК не влияет на setlocale. Вообще никак.

Простейший пример:

ini_set('intl.default_locale', 'ru_RU.CP1251');

echo locale_get_default().'<br>';

echo setlocale(LC_ALL, 0).'<br>';

А вот куда писать баг репорт я не знаю. На модуль php_intl?

эээээ.... не проснулись? Ещё раз топик читаем. Эти мануалы ни о чём.

---------- Добавлено 17.10.2013 в 16:39 ----------

'[umka:
;12247698']В каждый скрипт можно добавить нужную строчку другим скриптом )
Вообще, когда я что-то делаю, у меня почти всегда инклудится какой-то header.php, в котором я при необходимости добавляю подобные штуки.

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

---------- Добавлено 17.10.2013 в 16:41 ----------

Хотя я догадываюсь, что разработчики забили по 2-м причинам:

1. Это всё происходит только в винде

2. Всё переводиться на utf-8, а там нет таких проблем

siv1987:
На винде локаль устанавливается через Russian_Russia.
ru_RU. для юникс

Берём ещё раз и читаем топик до конца :)

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

С высотой вроде всё ок. Может быть вы о том, что текст не ровно?

'[umka:
;12247428']
Как вариант, сделать в php.ini или в конфиге виртуалхоста костыль в виде auto_prepend_file.

Это последнее о чём я думаю. Как оно всё работало в 5.2 не понимаю. И что в 5.4 версии не смогли сделать установку локали. Да это нонсенс.

---------- Добавлено 17.10.2013 в 15:45 ----------

не ну умора в том, что переводим код в utf-8 и всё начинает работать. Никаких локалей не нужно.

Всё короче.

Достаточно просто в php.ini прописать: default_charset = "CP1251"

Остальная проблема вылилась из того, что apache не перезагрузился. Пришлось убивать и заново стартовать.

---------- Добавлено 17.10.2013 в 13:40 ----------

'[umka:
;12246978']
Вы меня конфузите такими вопросами ))
Или скриптом или в системе выставить или в php.ini или в .htaccess

Да я сам тут сконфузился. Думал неужели в php5.4 по другому что-то замутили 😂

А это сволочуга апатч 😂

---------- Добавлено 17.10.2013 в 14:47 ----------

Так, рано радовался. Всё не так просто.

default_charset = "CP1251" чуть не то. Если в скрипте не установить локаль, то она не срабатывает.

Ок, вопрос на засыпку. Как в php.ini прописать локаль?

Модуль intl не срабатывает, библиотека подключена.

Ещё варианты?

---------- Добавлено 17.10.2013 в 14:49 ----------

Проверяю phpinfo()

intl.default_locale Russian_Russia.1251

Всё ок, НО пока в скрипте я не пропишу: setlocale(LC_ALL, 'Russian_Russia.1251');

Регулярка не сработает. В чём прикол?

'[umka:
;12246926']Значит, проблема с локалью.
У меня вот такой вариант не работает (обе реги)

$str="это как так?";
echo preg_replace("/\bкак\b/", "никак", $str);
echo preg_replace("/ка\w/", "никак", $str);


А вот такой вариант работает (обе реги):

setlocale(LC_CTYPE,"ru_RU.CP1251");
$str="это как так?";
echo preg_replace("/\bкак\b/", "никак", $str);
echo preg_replace("/ка\w/", "никак", $str);

На винде с 5.4?

---------- Добавлено 17.10.2013 в 13:32 ----------

Сработала вот такая установка:

setlocale(LC_ALL, 'ru_RU.CP1251', 'rus_RUS.CP1251', 'Russian_Russia.1251');

НО... как это по умолчанию то выставить. Скриптов много.

'[umka:
;12246874']То есть, например, \w оно принимает за букву?

\w если только опять же по бокам английские буквы

А вот \W отлично кушает. Конечно только приходиться менять кучу шаблонов для вывода т.к. он всё что по бокам скушает.

---------- Добавлено 17.10.2013 в 13:17 ----------

Но проблема остаётся, с чего это вдруг \b перестало обрабатываться.

---------- Добавлено 17.10.2013 в 13:19 ----------

О прикол. В UTF-8 отлично обрабатывает :D

Всего: 31516