- Поисковые системы
- Практика оптимизации
- Трафик для сайтов
- Монетизация сайтов
- Сайтостроение
- Социальный Маркетинг
- Общение профессионалов
- Биржа и продажа
- Финансовые объявления
- Работа на постоянной основе
- Сайты - покупка, продажа
- Соцсети: страницы, группы, приложения
- Сайты без доменов
- Трафик, тизерная и баннерная реклама
- Продажа, оценка, регистрация доменов
- Ссылки - обмен, покупка, продажа
- Программы и скрипты
- Размещение статей
- Инфопродукты
- Прочие цифровые товары
- Работа и услуги для вебмастера
- Оптимизация, продвижение и аудит
- Ведение рекламных кампаний
- Услуги в области SMM
- Программирование
- Администрирование серверов и сайтов
- Прокси, ВПН, анонимайзеры, IP
- Платное обучение, вебинары
- Регистрация в каталогах
- Копирайтинг, переводы
- Дизайн
- Usability: консультации и аудит
- Изготовление сайтов
- Наполнение сайтов
- Прочие услуги
- Не про работу
Все что нужно знать о DDоS-атаках грамотному менеджеру
И как реагировать на "пожар", когда неизвестно, где хранятся "огнетушители
Антон Никонов
В 2023 году Google заблокировал более 170 млн фальшивых отзывов на Картах
Это на 45% больше, чем в 2022 году
Оксана Мамчуева
Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий
С помощью curl получаю данные со стороннего сайта, изначально его кодировка не известна. В случае если кодировка windows-1251 получаю не читаемый сайт (испорчена кодировка), мне нужно отображать utf-8.
iconv("windows-1251", "UTF-8", $post); - помогает, НО если изначально кодировка и так utf-8 сайт я не получаю - белая страница.
curl_setopt($rCurl, CURLOPT_ENCODING, 'gzip,deflate'); - не помогло вообще.
Нашел как мне кажется решение моей проблемы:
$tab = array("UTF-8", "ASCII", "Windows-1251", "Windows-1252", "ISO-8859-15", "ISO-8859-1", "ISO-8859-6", "CP1256");
$chain = "";
foreach ($tab as $i)
{
foreach ($tab as $j)
{
$chain .= " $i$j ".iconv($i, $j, "$my_string");
}
}
echo $chain;
?>
Как я понял, данная функция должна определить изначальную кодировку и потом, при необходимости изменить ее, но совладать с этим кодом я не смог.
Я не понял, где нужно задать нужную мне UTF-8 кодировку.
Мне кажется, что из строки $tab = array нужно удалить UTF-8, так как именно эта кодировка мне и нужна.
Пробовал еще так сделать:
if ( strlen(utf8_decode($post)) == strlen($post) ) {
// $string is not UTF-8
return iconv("windows-1251", "UTF-8", $post);
} else {
// already UTF-8
return $post;
}
}
echo $post;
не помогло.
Сделал так и решил проблему:
if ($isWinCharset) {
$post = iconv("Windows-1251", "UTF-8", $post);
}
Потом нашел пару сайтов, где код не помог.
В мета у сайтов стоит кодировка utf-8 но сам файл видимо в другой кодировке, из-за чего на сайте появляются иероглифы, пример такого сайта:
indikator.one-trading.ru
Если убрать
if ($isWinCharset) {
$post = iconv("Windows-1251", "UTF-8", $post);
}
то сайт отображается корректно НО слетают сотни других, которые изначально в Windows-1251 кодировке.
Можно как-то зафиксировать эту проблему, возможно я что-то не так понимаю и сайт indikator.one-trading.ru на самом деле в utf-8 кодировке, тогда в чем проблема?
Может в строке $isWinCharset = mb_check_encoding($post, "windows-1251");
прописать несколько кодировок, чтобы угадать нужную, как?
Помогите, пожалуйста.
Спасибо!
лучше варианта не придумать.
foxi, конкретно с сайтом indikator.one-trading.ru
проблема решена!
Но сайты с явно указанной windows-1251 кодировкой слетают в иероглифы :(
У сайтов, где в мета прописана utf-8 кодировка, на самом деле ASCII .
Этот код их обрабатывает и результат корректный:
$outch = iconv(mb_detect_encoding($outch), "UTF-8", $outch);
}
На сайтах, где кодировка в мета указана как windows-1251 на самом деле кодировка тоже ASCII и код приведенный выше выводит на таких сайтах иероглифы.
Жуть, как это безобразие можно исправить?
Как-то можно объединить два кода:
$outch = iconv(mb_detect_encoding($outch), "UTF-8", $outch);
}
и
if ($isWinCharset) {
$post = iconv("Windows-1251", "UTF-8", $post);
}