А в чем конкретно проблема? С веба может прилететь в разных кодировках? Или что? При нормально настроеном сервере с веба должно приходить все время в одной кодировке. Т.е. она должна быть известна. Если она не совпадает с той, которая в базе, значит надо отдельной директивой обратиться к базе и разъяснить ей кодировку клиента (скрипта). Правда если в скрипт приходит utf-8, то могут возникнуть некоторые проблемы и в базу пойдет уже битый utf. В общем, поскольку непонятно, в чем именно на данный момент загвоздка, то и сказать что-то внятное затруднительно.
Моя практика говорит, что такое возникает в параметрах, если форма была
в восьмибитной кодировке, а пользователь ввел в нее символы, в этой
кодировке не отобразимые (например, форма в win-12511, а ввели текст с
умляутами или по-польски с l-перечеркнутой; или форма в latin-1, а ввели русский текст).
Если таких форм несколько и в разных кодировках - то проблема не
решается в принципе. Иначе код типа
$cgiparams =~ s/%23%26(\d+)/uri_escape_utf8(chr($1))/ge;
$cgiparams =~ s/((?=%[0-9a-f]{2})+)/uri_escape_utf8(decode('encoding-of-form',uri_unescape($1
)))/gie;
будучи примененным к нераспарсенной search части урла (т.е. тому, что после '?')
переведет его в заэскейпанный UTF-8.
За точность кода не ручаюсь - писал по памяти из дома, но идея должны быть ясна.
> А в чем конкретно проблема? С веба может прилететь в разных кодировках? Или что? При нормально настроеном сервере с веба должно приходить все время в одной кодировке.
Кодировка CGI-параметров практически не зависит от сервера - она зависит от кодировки страницы с формой, которую пользователь за-submit-ил. Если ты, например, даешь размещать формочки на чужих сайтах ("поиск яндексом/гуглем по этому сайту"), то ты вообще не можешь ничего сказать про кодировку параметров заранее. См. также код в предыдущем посте.
>Кодировка CGI-параметров практически не зависит от сервера
Она зависит от сервера постольку, поскольку от него зависит то, в какой кодировке он выплюнет клиенту документ с формой. Если с этим нет бардака, то и проблемы нет. Но в целом, пока что топикстартер так и не отписал, в чем конкретно проблема. При прочих равных я особых проблем в озвученной задаче не вижу.