| |
|
|
| | Как в зависимости от предпочтений клиентского браузера выдать ему страницу на английском или на русском, а роботу выдать обе? | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 17:50)
| | | Парсить заголовки браузера. $_SERVER вам в помощь.
$_SERVER[HTTP_ACCEPT_LANGUAGE]
|
Поисковики, скорее всего, не указывают этот заголовок. А если и указывают, то представляются в $_SERVER[HTTP_USER_AGENT] | |
| |
|
|
| |
|
|
| |
для: SHAman
(07.09.2007 в 17:55)
| | | >Парсить заголовки браузера. $_SERVER вам в помощь.
>
>
$_SERVER[HTTP_ACCEPT_LANGUAGE]
|
>Поисковики, скорее всего, не указывают этот заголовок. А если и указывают, то представляются в $_SERVER[HTTP_USER_AGENT]
Я, конечно, догадывался о существовании этих переменных,
но всё равно спасибо за подстрекательство к смелому шагу!
Вопрос имеет немного другой оттенок:
Реально ли начинающему грамотно пропарсить эти заголовки?
Я ведь толком не знаю даже в каком именно разнообразии они могут проявиться.
Может лучше отдать эту работу серверу или как-то скомбинировать, заставить взаимодействовать скрипты и Apachy?
Кажется это задача должна быть из числа стандартных, значит кто-то может знать чёткое
надёжное решение. | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 19:35)
| | | phpinfo();
найдите там этот заголовок и посмотрите, в каком виде представлено содержимое | |
| |
|
|
| |
|
|
| |
для: bronenos
(07.09.2007 в 19:48)
| | | Хы.. а просто echo нельзя сделать? :) | |
| |
|
|
| |
|
|
| |
для: kasmanaft
(07.09.2007 в 20:05)
| | | можно, но так он помотрит и еще кучу других полезных | |
| |
|
|
| |
|
|
| |
для: bronenos
(07.09.2007 в 19:48)
| | | Я посмотрел уже, но это лишь один частный пример
Придётся мне ссылку Трианона читать | |
| |
|
|
|
| |
|
|
| |
для: Trianon
(07.09.2007 в 19:57)
| | | Это я прочитаю,
но меня грызёт вопрос;
может быть я изобретаю велосипед?
Апачи может быть это делает?
Или про Апачи лучше на другом форуме спросить? | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 20:35)
| | | апач предоставит Вам это поле в массиве переменных окружения.
php - скопирует его в массив $_SERVER
За Вас его никто воспринимать и обрабатывать не станет. | |
| |
|
|
| |
|
|
| |
для: Trianon
(07.09.2007 в 20:45)
| | | У меня просто в голове не укладывается!
Вроде стандартная задача, неужели никто модуля для апача подходящего не
написал?!
Ну ладно...
Буду смотреть как тут парсить.
Хотя всё равно непонятно как роботов от браузеров отличать.
Список браузеров что ли сделать?
А всех остальных - в роботы?
В любом случае спасибо! | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 21:28)
| | | Может и написал. | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 21:28)
| | | ну оставляют такие следы как GoogleBot | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 17:50)
| | | А не забанят?
Если выяснится что роботу и клиенту отдают разные страницы... | |
| |
|
|
| |
|
|
| |
для: Loki
(12.09.2007 в 15:31)
| | | НЕТ | |
| |
|
|
| |
|
|
| |
для: mihdan
(14.09.2007 в 17:35)
| | | ну забанить то не забанят... но с СЕО точки зрения лучше так не делать...
поисковые боты обидчивые твари и иногда эмулируют реального пользователя(как браузер стандартный заголовки посылают)... | |
| |
|
|
| |
|
|
| |
для: tricket
(14.09.2007 в 20:10)
| | | А роботы вообще заголовки касательно языка посылают?
Если посылают, то часто ли? Кто-нибудь проверял? | |
| |
|
|
| |
|
|
| |
для: Eugene77
(15.09.2007 в 19:20)
| | | Да сделай простой выбор языка.. =) | |
| |
|
|
| |
|
|
| |
для: Eugene77
(07.09.2007 в 17:50)
| | | Роботу выдавать обе нельзя, то что вы хотите таким образом делать называется "клоакинг", то есть браузеру отдаете одну страницу, боту другую, в результате таких действий весь ваш сайт могут забанить. Именно по этой причине боты поисковиков ходят иногда под юзерагентом обычного браузера.
Теперь по сути, мне одно время нужно было быстро реализовать что-то подобное, ниже код, он кривоватый, но в принципе работает. Он проверяет какой язык установлен предпочтительным у пользователя в настройках браузера, если это русский, украинский или беларусский, то ставится кука и пользователю отдается страница на русском, в противном случае на английском.
<?php
class language {
var $language;
function __construct() {
$this->language = "en";
}
function set_cookie($language) {
$domain = ($_SERVER['HTTP_HOST'] !== 'localhost') ? $_SERVER['HTTP_HOST'] : false;
setcookie('language', $language, time()+60*60*24*365, '/', $domain, false);
}
function check_cookie() {
if(isset($_COOKIE['language'])) {
$cookie = $_COOKIE['language'];
switch ($cookie) {
case $cookie == "russian":
$this->language = "ru";
break;
case $cookie == "english":
$this->language = "en";
break;
default:
$this->language = "en";
break;
}
} else {
if ($this->check_rus_language() !== 0) {
$this->set_cookie('russian');
$this->language = "ru";
}
$this->set_cookie('english');
$this->language = "en";
$cookie = '';
}
return $cookie;
}
function check_rus_language() {
if (isset($_SERVER['HTTP_ACCEPT_LANGUAGE'])) {
$accept_lang = $_SERVER['HTTP_ACCEPT_LANGUAGE'];
$accept_lang = trim($accept_lang);
if (preg_match("/(be-by|ru|ru-ru|uk-ua)/i", $accept_lang, $match)) {
$lang = $match[0];
}
} else {
$lang = 0;
}
return $lang;
}
function set_language() {
header("http://{$_SERVER['HTTP_HOST']}{$_SERVER['REQUEST_URI']}");
header('HTTP/1.1 200 OK');
$this->set_cookie("english");
}
function defined_language() {
return $this->language;
}
}
?>
|
| |
| |
|
|
| |
|
|
| |
для: Unreal
(19.09.2007 в 21:25)
| | | Спасибо за интересный код!
Однако сама проверка на предпочтения браузера вызывает сомнения.
А что если там много чего написано?
Мне вот что в голову пришло:
$language='ru';
$language_value=0;
//Функция определяет предпочтительный язык
//из числа доступных в переменной $present_languages
// Ей и отдаём строку acceptable language
function http_language($http_str){
global $language;
global $language_value;
$present_languages=array('ru','en','fr');
$l_q=explode(',',$http_str);
foreach($l_q as $value){
$q_val=0;
$l=explode(';',$value);
if(in_array(trim($l[0]),$present_languages)){
if(trim($l[1])=='') $q_val=1;
else{
$q=explode('=',$l[1]);
if(trim($q[0])=='q') {$q_val=floatval($q[1]);echo $q_val;}
}
}
if($q_val>$language_value){
$language=trim($l[0]);
$language_value=$q_val;
}
}
return $language;
}
|
Посмотрите, пожалуйста, кто соображает, наколько он полноценный, без слабых мест.
В каких случаях он мне выдаст ошибочный результат? | |
| |
|
|
| |
|
|
| |
для: Eugene77
(03.10.2007 в 16:42)
| | | Проблема в том, что я даже потестировать его нормально не могу.
На моих двух браузерах работает,
но разве это показатель?!
Очень хотелось бы мнение ваше услышать,
тем более, что я сильно не уверен в правильности своего понимания
того, что в ссылке Трианона написано.
Что-то не возникло у меня ясной картины от прочитанного.
Вот если бы кто-то простыми словами объяснил... | |
| |
|
|
| |
|
|
| |
для: Eugene77
(04.10.2007 в 19:17)
| | | Ну, если советом помочь не получается, то может быть кто-нибудь скинет мне сюда
образцы строк, которые оставляют ACCEPT_LANGUEGE и.
Ведь если есть доступ к мультиязычному сайту, то насобирать несложно
Штук 100-200 хотя бы разных.
Я сам проверю свою функцию. | |
| |
|
|