Через GET запрос нужно отдать контент (простой текстовый тизер) другому сайту. Есть ли способ определить кодировку сайта, который делает запрос, чтобы отдать контент в нужной кодировке?
Вообще, способы именно программно определить кодировку - существуют, на Хабре, например, обсуждались. Конечно, о стопроцентной гарантии верного распознавания кодировки речи не идёт, но этот процент довольно высок. Есть алгоритм, дающий близкий к 100% результат. Но это не самый простой процесс, а стандартных функций, которые определяют кодировку (и делают это правильно), на сколько я знаю, не существует.
Можно требовать, что бы в запросе была заранее известная русская буква как отдельный параметр. Тогда легко восстановить кодировку. Но вообще-то, это забота запрашивающего сайта, зная в какой кодировке пришел ответ, перекодировать во внутреннюю... или ввести параметр в запросе, в какой кодировке хочет получить ответ запрашивающий сайт.
allforweb Зачем тебе это делать, когда можно ответственность за получение данных в нужной кодировке возложить на клиента?
Ну я могу запрашивать кодировку получателя и это очевидное решение, но есть же другой алгоритм. Многие рекламные сети (Google и Яндекс например) не запрашивают кодировку сайта и отдают коннтент в нужной кодировке. Значит они могут определить ее сами.
sobachnik это GET запрос! =) allforweb Ну я могу запрашивать кодировку получателя и это очевидное решение, но есть же другой алгоритм. тысячи их. но стоит ли их придумывать? =) Тебе надо в отпуск.
PHP: <?php $str = isset($_GET['text']) ? $_GET['text'] : ''; echo mb_detect_encoding($str, "auto"); ну а дальше видимо iconv ...
или вот так: PHP: <?php header('Content-type: text/plain; charset: utf-8'); function is_utf8($data) { $result = preg_replace('/.*/su', '', $data); return is_string($result) && strlen($result) == 0; } $text = isset($_GET['text']) ? $_GET['text'] : ''; $charset = is_utf8($text) ? 'UTF-8' : 'CP1251'; echo 'detected charset:' . $charset . "\n"; $text = iconv($charset, 'UTF-8//IGNORE', $text); echo $text; здесь делается допущение, что кодировка либо windows-1251 либо utf-8. я думаю это разумно
И таки что? Ты внимательно читал мой ответ? Если ты ищешь решение через жопу, то я пасс. Мой пример работает.
Функция mb_detect_encoding() работает через жопу Если достаточно отличить utf8 от не utf8 - то второй пример - да, норм.
в реале достаточно различать эти два случая. между latin1 и utf8 нет разницы а koi и dos остальись в вечной мерзлоте. не за что!