• Как настроить редирект на https в.htaccess?

    @tarasui
    для хостинга hts.ru

    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP:X-SSL} !^yes$
    RewriteRule (.*) https://gu77.ru/$1 [R=301,L]
    </IfModule>
    Ответ написан
    1 комментарий
  • Как исправить кодировку сайта в ответ на cURL запрос?

    @remzalp
    Программер чего попало на чем попало
    Собственно Вам удаленный сайт уже и так всё говорит, почему бы не учесть то, что он говорит?

    1. Заглядываем в заголовки HTTP ответа, видим:
    Content-Type:text/html; charset=UTF-8
    2. Заглядываем в контент страницы, видим:
    <meta charset="UTF-8" />
    3. Есть еще один метод подсказать кодировку:
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

    Решение - смотрим, чего нам говорят, подставляем в качестве параметра для iconv, но не забываем дефолтное значение на всякий случай.
    Вариант решения - если сайтов в ограниченное количество, храните где-то предпочитаемую кодировку.
    Фрагмент на python, реализующий автоматическое декодирование на основании заголовка ответа:
    encoding='utf-8' # кодировка по умолчанию
    tmp = r.headers.get('Content-Type').split('=') #режем по =, что справа - кодировка
    if len(tmp)>1: #если кодировка в заголовке есть - будет 2 элемента
        encoding=tmp[-1] # тогда берём последний
    page = r.content.decode(encoding)


    Итоговый ответ:
    <?php
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $engine_url );
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    ....
    //дополнить этим:
    curl_setopt($ch, CURLOPT_HEADER, 1);
    
    $tmpResult = curl_exec($ch);
    
    $header_size = curl_getinfo($ch,CURLINFO_HEADER_SIZE);
    curl_close($ch);
    
    $tmpHeaders = substr($tmpResult, 0, $header_size);
    $postResult = substr($tmpResult, $header_size);
    
    $headers = array();
    foreach(explode("\n",$tmpHeaders) as $header)
    {
    	$tmp = explode(":",trim($header),2);
    	if (count($tmp)>1)
    	{
    		$headers[strtolower($tmp[0])] = trim(strtolower($tmp[1]));
    	}
    }
    
    $encoding="utf-8"; //default
    if (isset($headers['content-type']))
    {
    	$tmp = explode("=", $headers['content-type']);
    	if (count($tmp)>1) $encoding = $tmp[1];
    }
    if ($encoding != "utf-8") $postResult = iconv($encoding, "UTF-8", $postResult);


    Всё. Получаем расширенный ответ, который содержит заголовки. Вырезаем из него заголовки и режем их в массив, плюс достаём тело ответа.
    Парсим заголовки http, вытаскиваем content-type и из него вытаскиваем кодировку
    Ответ написан