Что-то мне не очень понравилось решение с getallheader (). Взял два броузера один Unicode - Safari, MacOS 10.3.8, другой cp1251 - IE в Win2000Pro), вот отличия которые, как мне кажется, можно было бы использовать:
_SERVER["HTTP_ACCEPT_LANGUAGE"] (ru и en соответственно)
_SERVER["HTTP_USER_AGENT"]
Это как-то не конкретно.
Мне больше нравится определять кодировку строки из $_GET.
На моём сервере не обнаружилось iconv, поэтому я пробую через
на такой код:
PHP:
print "<h1>Проверим ?</h1>";
$encoding1 = mb_detect_encoding ($_GET['a'], "cp1251, UTF-8, UTF-7");
$encoding2 = mb_detect_encoding ($_GET['a'], "UTF-8, UTF-7, cp1251");
$encoding3 = mb_detect_encoding ($_GET['a'], "UTF-7, UTF-8, cp1251");
print "cp1251, UTF-8, UTF-7 => ".$encoding1 ."<br>";
print "UTF-8, UTF-7, cp1251 => ".$encoding2 ."<br>";
print "UTF-7, UTF-8, cp1251 => ".$encoding3 ."<br>";
Результат на Safari, MacOS X:
cp1251, UTF-8, UTF-7 => Windows-1251
UTF-8, UTF-7, cp1251 => UTF-8
UTF-7, UTF-8, cp1251 => UTF-8
Результат на IE, Win2000Pro:
cp1251, UTF-8, UTF-7 => Windows-1251
UTF-8, UTF-7, cp1251 => Windows-1251
UTF-7, UTF-8, cp1251 => Windows-1251
-~{}~ 22.02.05 18:37:
Результат: Mozilla, MacOS X:
cp1251, UTF-8, UTF-7 => UTF-8
UTF-8, UTF-7, cp1251 => UTF-8
UTF-7, UTF-8, cp1251 => UTF-8
Результат Opera 7.5.3, MacOS X:
cp1251, UTF-8, UTF-7 => Windows-1251
UTF-8, UTF-7, cp1251 => UTF-8
UTF-7, UTF-8, cp1251 => UTF-8
Вопрос такой, полагаюсь на ваш опыт.
1. Какие ещё многобайтные кодировки могут выдавать броузеры, хотя бы основная их часть. Всё это нужно для дополнительной функции в поиске, поэтому важно ухватить бОльшую часть, остальные, при желании, наберут запрос в GET форме.
2. Велика ли возможность того, что будет UTF-16, UTF-32, UCS2, UCS4 или ISO-8859-*, написано что mb_detect_encoding в таком случае потерпит фиаско.
3. Если не сложно подскажите чем лучше всего из unicode в win-1251 конвертить ?
Тут -
http://ru3.php.net/convert_cyr_string и на форуме предложено куча вариантов, что быстрее и правильнее ? (Apache/1.3.33 (Darwin), PHP/4.3.10, mod_perl/1.26, iconv нет)
P.S (тут уже был -
http://phpclub.ru/talk/showthread.php?s=&threadid=60127, http://phpclub.ru/talk/showthread.php?s=&threadid=60356)
Простите, что два сообщения, конец почему-то отбрасывается.
-~{}~ 22.02.05 22:32:
Решил проблему №3 так:
PHP:
function getQuery ($str)
{
$encoding = mb_detect_encoding ($str, "UTF-8, UTF-7, cp1251");
if (($encoding == "UTF-8") OR ($encoding == "UTF-7"))
{
return mb_convert_encoding($str, "cp1251", $encoding);
} else {
return $str;
}
}
print getQuery ($_GET['seachstr']);
Проверял там же, всё работает.
Вопросы 1 и 2 остаются.