UTF-8 локаль для windows

SergeyVorobiev

Насколько мне известно это невозможно. Но может всё-таки есть какие-нить пути? Подскажите, плиз.

kruzer25

Что ты имеешь в виду? Где именно тебе нужен utf-8?

okis

а что такое "локаль для windows"? есть региональные настройки, есть системные вызовы, принимающие параметры в unicode и в ansi.

SergeyVorobiev

Мне это нужно в PHP на винде. так как огромные проблемы возникают при strtolower или например preg_replace при работе с UTF-8. При это локаль типа ru_RU.UTF8 не ставиццо под винду Под Юникс - можно. Вот я и думаю как это проблему обойти. Конечно, на хостингах то винды не будет, но хочется и на локалке (винда) чтобы всё чики пики было. На крайняк можно конешно проверять на какой платформе работает скрипт и плясать от этого, но это беспонтовый вариант

kruzer25

Мне это нужно в PHP на винде. так как огромные проблемы возникают при strtolower или например preg_replace при работе с UTF-8.
Жгёшь! :lol:
Для работы со строками в UTF-8 надо использовать специальные функции: http://php.net/mbstring . Базовые функции умеют работать только с ASCII-кодировкой. А винда тут, не поверишь, совершенно ни при чём.

katrin2201

The set of available languages, country/region codes, and code pages
includes all those supported by the Win32 NLS API except code pages that
require more than two bytes per character, such as UTF-7 and UTF-8. If
you provide a code page like UTF-7 or UTF-8, setlocale will fail,
returning NULL. The set of language and country/region codes supported
by setlocale is listed in Language and Country/Region Strings.

katrin2201

А винда тут, не поверишь, совершенно ни при чём.
все таки причем, ибо это ее crt не переваривает мультибайт

sergeikozyr

есть мнение, что кодить для линупсов/юнипсов работая под вендой - извращение. Твоя проблема это доказывает.

kruzer25

Какой crt, ты о чём?
Все простые функции работы со строками в php работают с однобайтными строками. Для работы с неоднобайтными строками (или если важна кодировка, как, например, при strtolower кириллицы) - надо использовать функции mb_*.

katrin2201

тебя не настораживает, что один и тот же код работает под никс, и запарывается под виндой?

kruzer25

Какой именно код начинает вести себя не так?

serega1604

>есть мнение, что кодить для линупсов/юнипсов работая под вендой - извращение. Твоя проблема это доказывает.
на нормальных ЯП это вполне получается, так что эта проблема лишь доказывает убогость ПХП.
You are not dead yet. But watch for further reports.

kruzer25

Если ты посмотришь на ссылку , то увидишь, что никакие языки с этой функцией, выходит, нельзя считать нормальными.
Практически в любом языке (точнее, не в языке, а в базовой библиотеке) есть что-то платформозависимое. Либо ты это используешь и зависишь от платформы, либо не используешь и не зависишь, либо используешь с умом и не зависишь.

SergeyVorobiev


$a = 'фффффф';
echo mb_strtolower($a);//выводит квадратики так же как и strtolower
echo mb_detect_encoding($a); //выводит UTF-8

то есть mb_string функции тоже не работают.
Тут что-то не так. Не подскажите что может быть?
Я ранее не сильно интересовался вопросами utf8, а сейчас прочитав описания функций тоже не вижу решения.

SergeyVorobiev

Сейчас вот еще раз всё проверил на UNIX. Та же фигня.. и strtolower и mb_strtolower одинаково не работают, а работает как раз только локаленезависимая mb_convert_case... Поэтому на мой взгляд дело всё-таки в локали а не в многобайтных функциях. запросил у хостера список доступных. Завтра если будет возможно проверю.

kruzer25

то есть mb_string функции тоже не работают.
Такое ощущение, что ты описание функции не читал:
string mb_strtolower ( string $str [, string $encoding= mb_internal_encoding ] )

Либо передаёшь вторым аргументов кодировку, с которой хочешь работать; либо устанавливаешь её один раз с помощью mb_internal_encoding, там ведь всё написано.

katrin2201

? =)

kruzer25

Тоже на "a" начинается :o

yroslavasako

в этой теме уже два раза помянули моё имя всуе. Это неправильно, вот!

SergeyVorobiev


Большое тебе спасибо, теперь всё заработало!
В списке поддерживаемых mb_string кодировок есть windows-1251. Означает ли это что при работе с ней я могу так же просто использовать mb аналоги как с утф? конешно указав mb_internal_encoding и mb_regex_encoding равными windows-1251?

kruzer25

Да.
Оставить комментарий
Имя или ник:
Комментарий: