Приветствую!
В процессе отлавливания одного бага в PHP-шном модуле наткнулся
на крайне загадочное поведение фришной UTF-8 локали. Но лучше
один раз показать:
FreeBSD 6.4-RELEASE-p11 i386, PHP 5.3.8, маленький тестовый скрипт:
=========Beginning of the citation==============
#!/usr/local/bin/php
<?php
$src = "абвгдеёжзиклмнопрстуфхцчшщъыьэюя";
echo preg_replace('/[ \t]+/', " ", $src) . "\n";
echo preg_replace('/\s+/', " ", $src) . "\n";
echo preg_replace('/\s\s+/', " ", $src) . "\n";
echo preg_replace(array('/[[:blank:]]+/', '/\s+/'), " ", $src) . "\n";
echo preg_replace(array('/[[:blank:]][[:blank:]]+/', '/\s\s+/'), " ", $src)
. "\n";
=========The end of the citation================
Если зайти на сервер под локалью KOI8-R и запустить этот скрипт,
то получим 5 идентичных строчек с русским алфавитом. Если же этот
скрипт запустить под локалью UTF-8, то во второй и четвёртой строчке
буква "х" превратится в псевдографику с пробелом.
В любой другой кодировке данный баг не проявляется, на 8-ке и Линуксах
также всё нормально. Очевидно, дело в 6-ке, но в силу целого ряда причин
обновить данный сервер до 8-ки пока не представляется возможным, а баг
этот ломает работу нужного плагина для Вики. Оформлять PR смысла нет,
так как поддержка 6-ки официально прекращена.
В общем, прошу совета - что можно сделать, чтобы обойти на 6-ке этот баг?
"Выкинуть 6-ку, PHP или Вику" проблему, к сожалению, не решают.
--
WBR, Alexey Markov.