djatell

Рейтинг
38
Регистрация
19.05.2006
Должность
дятлинг, издолбинг.
alexfor:
Сам сегодня наблюдаю весь день непонятные перемены кодировки и заметил странность:

при первом заходе браузером (IE) и запросе на яндекс - кодировка cp1251, при повторном запросе utf-8 и при всех следуюших запросах utf-8

Если перезапустить браузер то ситуация повторяеться.

пример: http://www.yandex.ru/yandsearch?text=%E2%E8%E4%E5%EE - cp1251

Если не меняя запрос нажать "Найти" то переход кодировки на utf-8

Что это? Противостояние парсингу и сервисам использующим выдачу Яндекса?

Паранойя опять...

Просто полно допустим форм поиска которые отправляют в 1251, кстати и ya.ru тоже пока 1251 отправляет. При дальнейшей уже работе с поиском, когда реферер и accept charset позволяют - видно utf

Любителям массового парсинга выдачи это не может помешать.

P.S. Подскажите, если не трудно, другой способ нежели использование utf-8, если надо на одной странице показывать содержимое на разных языках, например китайском и русском. Кажется, у яндекса появилась возможность брать в индекс документы с иероглифами :) зря чтоль ДЦ открыли...

CNstats и прочие подобные можно подлатать пока апдейт не вышел.

if( utf8_compliant($string) ) {

$string=iconv("UTF-8","WINDOWS-1251",$string);

}

function utf8_compliant($str) {

if ( strlen($str) == 0 ) return true;

return (preg_match('/^.{1}/us',$str) == 1);

}

Ну или как-то так, в зависимости от целей.

делал недавно переход на новую структуру - сначала создал новую структуру поверх старой, со старой ссылки на новую. постепенно по мере тестирования убивал старые страницы/папки целиком и ставил 301 редирект. где-то за месяц всё проиндексировалось, трафик не падал вообще.

Или, что может быть даже лучше - арендовать самый маленький vps у российского хостера и повесить вторичный ДНС.

Может, дело не столько в DNS сколько в неумеренном бане сеток некоторыми местными провайдерами?

Со своей стороны - FTP и БД пароли к соим серверам не даю вообще. Для оптимизаторов есть волшебная кнопка позволяющая редактировать мета- и специальную (дополнительную к контенту) текстовку на абсолютно любой странице сайта. Если надо - даётся пароль редактора, для добавления текстов на сайт. И никаких посторонних телодвижений на сервере. Если сайт клиента сидит где-то на стороне - это уже его проблемы, давать/не давать.

п.с. мне кажется, если оптимизатору нужен фтп доступ и без него никак - это признак некачественно сделанного сайта.

Господа, при 304 как раз ОБЯЗАТЕЛЬНО делать exit !

Но надо учитывать что 304 отдаётся в ответ на запрос содержащий заголовок If-Modified-Since. Примеров правильной логики обработки такого запроса масса.

Вот например кусочек кода... по мотивам обсуждения на xpoint.ru

В начале разбираемся какой заголовок отдать...

А в конце отдаём...


// Conditional GET

// Если Conditional Get не задан - просто отдаем файл.
if (!isset($_SERVER['HTTP_IF_NONE_MATCH']) && !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$return=200;
//echo "<br>_none";
// Conditional GET задан, проверка только по If-Modified-Since:
} elseif (!isset($_SERVER['HTTP_IF_NONE_MATCH']) && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
//echo "<br>_first";
$unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']);
//echo "<br>".$unix_ims;
// если ошибка Conditional GET - просто отдаем файл.
if ($unix_ims > time() || !is_int($unix_ims)) {
$return=200;
//echo "<br>bad date";
// Conditional GET корректен.
} else {
//echo "<br>good date";
if ($unix_ims >= $main['timestamp']) {
$return=304;
} else {
$return=200;
}
}
// Conditional GET задан, проверка только по If-None-Match:
} elseif (isset($_SERVER['HTTP_IF_NONE_MATCH']) && !isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
//echo "<br>_second";
$INM = split('[,][ ]?', $_SERVER['HTTP_IF_NONE_MATCH']); // массив значений If-None-Match
foreach($INM as $enity) {
// если копия файла в кеше клиента не устарела
if ($enity == "\"$page_hash\"") {
$return=304;
}
}
// проверка и по If-Modified-Since, и по If-None-Match:
} elseif (isset($_SERVER['HTTP_IF_NONE_MATCH']) && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) {
$unix_ims = strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']); // значение If-Modified-Since в UNIX формате
$INM = split('[,][ ]?', $_SERVER['HTTP_IF_NONE_MATCH']); // массив значений If-None-Match
// Ошибка Conditional Get - просто отдаем файл.
if ($unix_ims > time() || !is_int($unix_ims)) {
//echo "<br>bad get";
$return=200;
// Conditional GET корректен.
} else {
foreach($INM as $enity) {
// если копия файла в кеше клиента не устарела
if ($enity == "\"$page_hash\"" && $unix_ims >= $FILE_INFO[2]) {
$return=304;
}
}
}
}
session_write_close();

header("X-Powered-By: chetyre tarakana i sverchok");

// может и зря пыжились, вдруг это вообще 404 ?
if ( $template=='404' ) {
$return=404;
header("Content-Type: text/html; charset=utf-8");
header("Last-Modified: " . gmdate("D, d M Y H:i:s",time())." GMT");
header("HTTP/1.1 404 Not Found");
ob_end_flush();
} elseif ( $return==304 ) {
header("HTTP/1.1 304 Not Modified");
header('ETag: "'.$page_hash.'" ');
// сброс буфера
while(ob_get_level()) ob_end_clean();
exit;
//по умолчанию 200
} else {
header("Content-Type: text/html; charset=utf-8");
header('ETag: "'.$page_hash.'" ');
header("Last-Modified: " . gmdate("D, d M Y H:i:s",$main['timestamp'])." GMT");
header('Expires: '.gmdate("D, d M Y H:i:s", $expiries).' GMT');
ob_end_flush();
}

Для правильной обработки надо знать реальное время последнего изменения страницы. Как дополнительная мера - для роботов отдавать заголовок Expiries с текущим временем+скажем неделя. На проиндексированность сайта не влияет, а вот трафик экономит прилично.

Не удержусь, встряну. Slackware 11

Причина - апдейты через slackbuild скрипты, удобно и софт получается компилированный из исходников.

это из-за первого объявления маркета, там длиннющий текст ссылки без пробелов

косяк-с

а кое-кто поедет менять "перегретые" винты, хорошо у человека RAID стоял правильный...

Пользуюсь только FireFox+KeeperLight, для моих скромных задач болоее чем достаточно.

Всего: 73