Правильного ответа нет. Любой выбор приводит к жертвам, любое решение требует платы. | Лишь навык имеет значение.
PHP и русский текст.
Здравствуйте.
Возникла проблема, часть функций PHP (5.3.10) работает только с английским текстом.
Самый простой пример - strtoupper(). Если в переменной английский текст, то функция работает нормально и строчные буквы становятся заглавными. А вот если в переменной русский текст, то ничего не происходит.
Я так понимаю, тут надо что-то в php.ini прописать?
Помогите, пожалуйста.
upd: если в переменную вбить и русские и английские символы, то английские становятся большими, а русские остаются прежними.
Здравствуйте.
Возникла проблема, часть функций PHP (5.3.10) работает только с английским текстом.
Самый простой пример - strtoupper(). Если в переменной английский текст, то функция работает нормально и строчные буквы становятся заглавными. А вот если в переменной русский текст, то ничего не происходит.
Я так понимаю, тут надо что-то в php.ini прописать?
Помогите, пожалуйста.
upd: если в переменную вбить и русские и английские символы, то английские становятся большими, а русские остаются прежними.
-
-
24.02.2012 в 19:53-
-
24.02.2012 в 21:33Поиск по поисковикам даёт три решения.
1) использовать функцию setlocate. Ноль эффекта абсолютно.
2) написать свою функцию для преобразования символов. Нерационально.
3) испльзовать mb_strtoupper. Работает только частично, не все символы обрабатывает, одни делает большими, другие не делает. + на форумах народ пишет, что она работает медленнее, чем strtoupper и это заметно при большом количестве запросов и в больших циклах. Так что тоже не вариант.
И да, забыл написать - у меня .php-файлик в ANSI сохранён. Сохранение в других кодировках результата не даёт.
-
-
24.02.2012 в 21:39возможно нужно изменить настройки по умолчанию. Аски кстати 7 битный, точнее не так, там мусор во второй половине. Так что если вы сохраняете из нотепада в аски то по умолчанию сохраняете в windows-1251
-
-
24.02.2012 в 22:17Проблема решилась, но я так и не понял до конца причину. И походу она решилась не до конца.
В общем, решилось всё так.
1) Прописываю в коде странички: echo setlocale(LC_CTYPE, "");
2) Обновляю страничку в браузере и смотрю что мне выдало. А выдало мне следующее: Russian_Russia.1251
3) После этого в код странички вставляю: setlocale(LC_ALL, "Russian_Russia.1251");
4) Обновляю страничку, вижу, что стало нормально работать.
И вот тут начинается самое весёлое.
5) Удаляю из кода странички: setlocale(LC_ALL, "Russian_Russia.1251");
6) Обновляю страничку - усё продолжает работать!!! о_О
7) Выключаю апач. Включаю заново - перестало работать.
То бишь, либо в каждый скрипт пихать setlocale(LC_ALL, "Russian_Russia.1251");, либо это всё будет работать до первого перезапуска сервера(((
В общем, поищу сейчас, где это можно прописать, чтобы действовало на всех.
Спасибо за ссылку, сейчас погляжу чего там можно натворить)
-
-
24.02.2012 в 22:28defaultcharset
mod_encoding
-
-
24.02.2012 в 22:39defaultcharset
mod_encoding
Ни одного, ни другого в httpd.conf не найдено.
Он у меня, в принципе, почти дефолтный. Я только пути поменял соответственно установке и всё. Ну и ещё php там прописался, где модуль брать.
-
-
24.02.2012 в 22:45joomlaforum.ru/index.php?topic=128228.0
-
-
24.02.2012 в 23:01-
-
24.02.2012 в 23:14-
-
24.02.2012 в 23:19-
-
25.02.2012 в 14:59-
-
25.02.2012 в 15:07Мне для тренировки php и так хватит. А потом, когда уже обкатаюсь и лучше буду разбираться, тогда можно будет на настройку переключиться. Сам язык сейчас просто приоритетней. ^^
-
-
25.02.2012 в 15:26echo setlocale(LC_ALL, 0);-
-
25.02.2012 в 15:51Если вбить echo setlocale(LC_ALL, 0); выдаёт просто "С".
Если вбить echo setlocale(LC_ALL, ""); выдаёт "Russian_Russia.1251".
То бишь, нужная локаль и так вроде стоит. Но пока не укажешь принудительно setlocale(LC_ALL, 'Russian_Russia.1251'); strtoupper работает только с латиницей.
upd: Возможно тут всё-таки в апаче дело. Я вот только сейчас заметил - после запуска апача функция не работает. Но если несколько раз обновить страничку, то она начинает работать о_О
-
-
25.02.2012 в 15:54-
-
25.02.2012 в 15:59Да. Тут даже не из формочки берётся, а просто в коде переменной строку назначил и играюсь с ней. Файлик сохранён в ANSI + в апаче прописано AddDefaultCharset cp1251
Насчёт upd из предыдущего коммента: сейчас несколько раз прогнал апач вкл/выкл. Не работает функция. То видимо глюк был или браузеры из кеша чего-то доставали.
-
-
25.02.2012 в 16:03-
-
25.02.2012 в 17:22От в том-то и дело, что хрень. Нормально работает только если ему принудительно ту же локаль задать.
-
-
25.02.2012 в 17:28Прописан вывод локали: echo setlocale(LC_ALL, "");
Перезапуск апача. Первое открытие страницы - не работает.
Второе открытие страницы (обновление или запуск в другом браузере) - работает.
То бишь, как я понял, чтобы оно заработало необходимо, чтобы setlocale запустилась хоть один раз.
При первом запуске она просто делает то, что с неё хотят (в данном случае даёт данные для вывода), в последующие разы она уже помнит локаль и всё начинает работать. Дурдом.
-
-
25.02.2012 в 20:35А вот то, что с первого раза ничего не работает — это дурдом, не спорю. )
-
-
26.02.2012 в 03:07Вот о том и речь. Первый раз не работает, а потом усё фурычит. Сейчас ось переставил, попробовал на чистой, авось с ней что-то не так. Но всё также - начинает работать только после однократного применения setlocale.
-
-
26.02.2012 в 03:10