<?php
// Список локалей, которые будут устанавливаться по порядкку
$locales = array(
"Russian_Russia.1251",
"ru_RU.CP1251",
"ru_RU.cp1251",
"ru_RU",
"RU",
"rus_RUS.1251"
);
$setFlag = false;
foreach ($locales as $localeName) {
if ($setFlag === false) {
// Выполняем установку локали
setlocale(LC_ALL, $localeName);
}
// Провреряем, установлена ли локаль
if ($setFlag === false && strtolower("qwertyёЁАБГДЯQWERTYZ") === "qwertyёёабгдяqwertyz") {
// Локаль установлена корректно
$setFlag = true;
break;
}
}
if ($setFlag !== true) {
// Ошибка, локаль не установлена
echo "<p>Fatal error: PHP can't setup locale to CP1251 character set (ru_RU.CP1251 for *nix OS, Russian_Russia.1251 for Windows OS). This locale is missing or operation system not supported it.</p><ul><li>To fix this error on Linux OS edit file /etc/locale.gen and add line <b>ru_RU.CP1251 CP1251</b> (or uncomment this line) and run <b>locale-gen</b> (root privileges required);</li><li>For Debian based Linux (Debian, Ubuntu etc...) use <b>dpkg-reconfigure locales</b> command for configuring locales (root privileges required);</li><li>For FreeBSD use <b>locale-gen ru_RU.CP1251</b> (root privileges required);</li><li>For Windows OS install locale from Control pannel -> Languages and Regions section (administrator privileges required).</li></ul><p>Please contact with server administrator and notify him about this error</p>";
exit();
}
setlocale(LC_NUMERIC, "C"); // for float numeric
?>
<?php
// Set locale in UTF-8 Not supported in Windows
if (PHP_OS == "WINNT") {
return 0;
}
// Список локалей, которые будут устанавливаться по порядкку
$locales = array(
"ru_RU.UTF8",
"Russian_Russia.65001",
"Russian_Russia.UTF8",
"ru_RU.UTF-8"
);
$setFlag = false;
foreach ($locales as $localeName) {
if ($setFlag === false) {
// Выполняем установку локали
setlocale(LC_ALL, $localeName);
}
// Провреряем, установлена ли локаль
if ($setFlag === false &&
//(mb_strtolower("qwertyёЁАБГДЯQWERTYZ") === "qwertyёёабгдяqwertyz")
//||
preg_match("/^[а-яЁё]+$/ui", strftime("%a"))
) {
// Локаль установлена корректно
$setFlag = true;
break;
}
}
if ($setFlag !== true) {
// Ошибка, локаль не установлена
echo "<p>Fatal error: PHP can't setup locale to Russian UTF8 character set (ru_RU.UTF8 for *nix OS, Russian_Russia.65001 for Windows OS). This locale is missing or operation system not supported it.</p><ul><li>To fix this error on Linux OS edit file /etc/locale.gen and add line <b>ru_RU.UTF8 UTF8</b> (or uncomment this line) and run <b>locale-gen</b> (root privileges required);</li><li>For Debian based Linux (Debian, Ubuntu etc...) use <b>dpkg-reconfigure locales</b> command for configuring locales (root privileges required);</li><li>For FreeBSD use <b>locale-gen ru_RU.UTF8</b> (root privileges required);</li><li>For Windows OS install locale from Control pannel -> Languages and Regions section (administrator privileges required).</li></ul><p>Please contact with server administrator and notify him about this error</p>";
exit();
}
setlocale(LC_NUMERIC, "C"); // for float numeric
ini_set("mbstring.internal_encoding", "utf8");
?>
Омг зачем весь этот говнокод?foreach ($locales as $localeName) {
...
1. mb_strtolower указывайте кодировку или укажите ее через ini_set;offtop:зачем сразу упоминать про фикалии при указании своего более простого кода
вначале что было сделано а потом вопросы. и так
поставил mb_strtolower($title,'UTF-8') и все прекрасно сработало, поставил второй параметр. первоночально подумал это нужно если преобразуемая строка кодировки отличной от "на странице", ведь у меня страница(файл) сохранен как утф .
1. если не указан ни второй параметр ни mbstring.internal_encoding а mbstring.language=neutral, за какое значение должна приниматься внутреняя кодировка ?
mb_internal_encoding() вернул ISO-8859-1 почему?
теперь вопрос, только прочтите пожалуйстав внимательно.
2. как я понял действие setlocale не временое (пока она в памяти) а постояное потому что даже после удаления её из кода эфект остался (помог только рестарт сервисов), что а главное где она меняет?
3. на что могла повлиять setlocale (кроме этого просто ничего не делалось с кодом или php.ini) если
-до установки локали mb_strtolower($caps[0]) возращал "Новости" (setlocale нету в коде)
-после установки локали и потом удаления её из кода, mb_strtolower($caps[0]) возращает теперь мусор ����� (хотя setlocale нету в коде)
Кривых серверов за свое время встречал массу, где как бэ и локаль устанавливается, но функции НЕ работают корректно.Омг зачем весь этот говнокод?
$locales = array(...);
if (false === setlocale(LC_ALL, $locales)) {
// failed to set locale
}