UTF-8 локаль для windows
Что ты имеешь в виду? Где именно тебе нужен utf-8?
а что такое "локаль для windows"? есть региональные настройки, есть системные вызовы, принимающие параметры в unicode и в ansi.
Мне это нужно в PHP на винде. так как огромные проблемы возникают при strtolower или например preg_replace при работе с UTF-8. При это локаль типа ru_RU.UTF8 не ставиццо под винду Под Юникс - можно. Вот я и думаю как это проблему обойти. Конечно, на хостингах то винды не будет, но хочется и на локалке (винда) чтобы всё чики пики было. На крайняк можно конешно проверять на какой платформе работает скрипт и плясать от этого, но это беспонтовый вариант
Мне это нужно в PHP на винде. так как огромные проблемы возникают при strtolower или например preg_replace при работе с UTF-8.Жгёшь!
Для работы со строками в UTF-8 надо использовать специальные функции: http://php.net/mbstring . Базовые функции умеют работать только с ASCII-кодировкой. А винда тут, не поверишь, совершенно ни при чём.
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.
А винда тут, не поверишь, совершенно ни при чём.все таки причем, ибо это ее crt не переваривает мультибайт
есть мнение, что кодить для линупсов/юнипсов работая под вендой - извращение. Твоя проблема это доказывает.
Все простые функции работы со строками в php работают с однобайтными строками. Для работы с неоднобайтными строками (или если важна кодировка, как, например, при strtolower кириллицы) - надо использовать функции mb_*.
тебя не настораживает, что один и тот же код работает под никс, и запарывается под виндой?
Какой именно код начинает вести себя не так?
на нормальных ЯП это вполне получается, так что эта проблема лишь доказывает убогость ПХП.
You are not dead yet. But watch for further reports.
Практически в любом языке (точнее, не в языке, а в базовой библиотеке) есть что-то платформозависимое. Либо ты это используешь и зависишь от платформы, либо не используешь и не зависишь, либо используешь с умом и не зависишь.
$a = 'фффффф';
echo mb_strtolower($a);//выводит квадратики так же как и strtolower
echo mb_detect_encoding($a); //выводит UTF-8
то есть mb_string функции тоже не работают.
Тут что-то не так. Не подскажите что может быть?
Я ранее не сильно интересовался вопросами utf8, а сейчас прочитав описания функций тоже не вижу решения.
Сейчас вот еще раз всё проверил на UNIX. Та же фигня.. и strtolower и mb_strtolower одинаково не работают, а работает как раз только локаленезависимая mb_convert_case... Поэтому на мой взгляд дело всё-таки в локали а не в многобайтных функциях. запросил у хостера список доступных. Завтра если будет возможно проверю.
то есть mb_string функции тоже не работают.Такое ощущение, что ты описание функции не читал:
string mb_strtolower ( string $str [, string $encoding= mb_internal_encoding ] )
Либо передаёшь вторым аргументов кодировку, с которой хочешь работать; либо устанавливаешь её один раз с помощью mb_internal_encoding, там ведь всё написано.
? =)
Тоже на "a" начинается
в этой теме уже два раза помянули моё имя всуе. Это неправильно, вот!
Большое тебе спасибо, теперь всё заработало!
В списке поддерживаемых mb_string кодировок есть windows-1251. Означает ли это что при работе с ней я могу так же просто использовать mb аналоги как с утф? конешно указав mb_internal_encoding и mb_regex_encoding равными windows-1251?
Да.
Оставить комментарий
SergeyVorobiev
Насколько мне известно это невозможно. Но может всё-таки есть какие-нить пути? Подскажите, плиз.