Приветствую!

В процессе отлавливания одного бага в 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.

Ответить