Strtolower и кирилица

Статус
В этой теме нельзя размещать новые ответы.

Активист

Активист
Команда форума
спасибо Активист.

что такое вокер?

может это мне поможет понять почему после рестарта апачи+пхп mb_strtolower($caps[0]) всеравно возращает мустор. хотя до первой "игры" с локале оно возращало текст "Новости" пусть не лоуркейс но и не мусор
http://ru2.php.net/setlocale

Warning

The locale information is maintained per process, not per thread. If you are running PHP on a multithreaded server API like IIS or Apache on Windows, you may experience sudden changes in locale settings while a script is running, though the script itself never called setlocale(). This happens due to other scripts running in different threads of the same process at the same time, changing the process-wide locale using setlocale().
 

alexblade

Новичок
Информация о локали модифицируется во всем процессе, а не по каждому потоку отдельно. Если вы используете PHP на многопоточном сервере, таком как IIS или Apache под Windows, вы можете обнаружить неожиданные изменения в настройках локали во время выполнения скриптов, никогда и не вызывавших setlocale(). Это происходит из-за того, что другие скрипты, запущенные в параллельных потоках данного процесса, в то же самое время поменяли настройки локали для всего процесса с помощью setlocale().
ну после этого объяснения немного становится понятно. но тут упоминается про "запущенные в параллельных потоках данного процесса, в то же самое время " я же удалял сетлокале и спустя минуту открывал а не в тоже самое время. и это НЕ совсем понятно. интересно тогда когда это "тоже самое время" истекает ?

НО в любом случае это не объясняет то что было до и то что стало после, а имено

до того как попробовал сетлокале:
mb_strtolower($caps[0]) (БЕЗ ВТОРОГО параметра) возращал "Новости"

после как попробовал сетлокале и удалил её И перегрузил апачи+пхп
mb_strtolower($caps[0]) (БЕЗ ВТОРОГО параметра) возращает Мусор

гуру пхп, как такое могло произойти ?
 

pav

Новичок
Мало того, что юникод в php работает через одно место, так еще и для некоторых строковых функций нет аналогов в mb_. Например, тот же ucfirst, strrev и т.д. При этом разработчики языка ломают совместимость с существующими движками в однобайтных кодировках. Я впервые начинаю задумываться о смене языка.
 

fixxxer

К.О.
Партнер клуба
ой, ну если так надо всякие mb_ucfirst, пишешь 1 раз

class StringTools {

static public function ucfirst($string) {
return mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1);
}
...
итд
...
}

и таскаешь с собой.

По секрету скажу, что с юникодом так или иначе задница везде, кроме JVM-based языков :)
 

pav

Новичок
ой, ну если так надо всякие mb_ucfirst, пишешь 1 раз

class StringTools {

static public function ucfirst($string) {
return mb_strtoupper(mb_substr($string, 0, 1)) . mb_substr($string, 1);
}
...
итд
...
}

и таскаешь с собой.

По секрету скажу, что с юникодом так или иначе задница везде, кроме JVM-based языков :)
Я отдельный класс давно написал для этой цели, все функции завязаны на регулярках с u-модификатором. Но нормальных штатных средств для работы с юникодом в языке нет, и даже "официального" костыля тоже нет.
 

fixxxer

К.О.
Партнер клуба
Я, кстати, наврал, в python 3 с юникодом все весьма хорошо. Вот только многие либы-фреймворки до сих пор на двойке.
В руби костыли, хотя в 1.9, конечно, лучше чем раньше.
 

Ragazzo

TDD interested
fixxxer
Вот только многие либы-фреймворки до сих пор на двойке.
Я бы даже сказал почти все) переход что-то очень затянулся. Ну кстати во втором тоже норм с юникодом, если использовать модификаторы и вначале файла явно указывать ее.
 

fixxxer

К.О.
Партнер клуба
fixxxer

Я бы даже сказал почти все) переход что-то очень затянулся. Ну кстати во втором тоже норм с юникодом, если использовать модификаторы и вначале файла явно указывать ее.
...и если исходить из наивного предположения, что все используемые библиотеки unicode-safe. :)
 

Активист

Активист
Команда форума
самый косяк в php, в том что utf8 c bom заголовком определяется как ВЫВЫД в буфер и не режется на уровне интерпритатора, дурдом.
 

Ragazzo

TDD interested
Сколько школьников и нервных на форуме развелось, ппц просто.
 

Активист

Активист
Команда форума
Любой нормальный текстовый редактор или ide это умеет.
Я посмотрю на тебя, когда ты откроешь какой-либо текствой файл, отредактируешь его, а потом удивишься, что не латинские символы выпилены в /dev/null
 

pav

Новичок
Откуда все эти юные неадекваты повылазили?

Сколько школьников и нервных на форуме развелось, ппц просто.
Ты про себя говоришь?

Я посмотрю на тебя, когда ты откроешь какой-либо текствой файл, отредактируешь его, а потом удивишься, что не латинские символы выпилены в /dev/null
Ты вообще понимаешь, для чего нужен bom? Если нет - бегом в гугл.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху