VBsupport перешел с домена .ORG на родной .RU
Ура!
Пожалуйста, обновите свои закладки - VBsupport.ru
Блок РКН снят, форум доступен на всей территории России, включая новые терртории, без VPN
На форуме введена премодерация ВСЕХ новых пользователей
Почта с временных сервисов, типа mailinator.com, gawab.com и/или прочих, которые предоставляют временный почтовый ящик без регистрации и/или почтовый ящик для рассылки спама, отслеживается и блокируется, а так же заносится в спам-блок форума, аккаунты удаляются
Если вы хотите приобрести какой то скрипт/продукт/хак из каталогов перечисленных ниже: Каталог модулей/хаков
Ещё раз обращаем Ваше внимание: всё, что Вы скачиваете и устанавливаете на свой форум, Вы устанавливаете исключительно на свой страх и риск.
Сообщество vBSupport'а физически не в состоянии проверять все стили, хаки и нули, выкладываемые пользователями.
Помните: безопасность Вашего проекта - Ваша забота. Убедительная просьба: при обнаружении уязвимостей или сомнительных кодов обязательно отписывайтесь в теме хака/стиля
Спасибо за понимание
У меня возникла проблема.
Дело в том, что я использовал поиск по новостям и публиковал результаты в новостном разделе форума. Поиск в новостях был в виде RSS ленты с Google News.
Все работало нормально, но гдето месяца 2 назад в Google, что то поменяли и Вобла перестала нормально отображать новости. Что то стало с кодировками при парсинге.
В общем вид стал таким:
Я прочел, что гуглы перешли на UTF-8
Установил воблу с UTF-8 руссификацию с тойже кодировкой.
Сделал новую базу в utf-8 и естественно установил все кодировки в сетах mysql тоже в utf-8.
Но проблема не ушла.
Скриншот сделан с последней установки 3.8.3 где все в UTF-8.
Подскажите, где копать и в чем проблема.
Может кто сталкивался с этим.
Прикладываю еще один скрин с администратора воблы. Так выглядит превью:
Забыл добавить в различных ридерах и агрегаторах линк на ленту работает замечательно и проблем с кодировками не возникает все в utf-8
kerk
k0t
Join Date: May 2005
Location: localhost
Posts: 28,839
Версия vB: 3.8.x
Пол:
Reputation:
Гуру 20333
Репутация в разделе: 3212
1
посмотри заголовки из исходника данной тобой ссылки и страницы, сгенеренной движком форума
твоя ссылка:
Code:
<rss version="2.0"><channel>.....
двиг форума:
Code:
<?xml version="1.0" encoding="UTF-8"?>....
разницу видишь?
в твоей не указана кодировка, только язык <language>ru</language>
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 201
0
Ну это я заметил. Но я же Гугл не могу поправить, это ево движок такой xml генери. хотя результат выдает честно в utf
По поводу версий... Еще один вопрос. Есть ли какой патч или настройка, которые позволяют увеличить версию xml до 2. Понимаю, что просто вставить не получится, так как вопрос соответствия стандарту и парсинг.
Может кто сталкивался с таким хаком или модом.
Но в любом случае спасибо. Если что накопаю, то сюда выложу.
Путей как побороть не вижу :( попробую писать в Гугл.
SMak044 добавил 30.08.2009 в 14:30
В гугл проблему отправил
SMak044 добавил 30.08.2009 в 15:07
Вот что я нашел в файле \includes\class_xml.php
PHP Code:
/** * Handle encoding issues as well as parsing the XML into an array * * @return boolean Success */ function parse_xml() { global $stylevar;
// in here we should do conversion from the input to the output. if (preg_match('#(<?xml.*encoding=[\'"])(.*?)([\'"].*?>)#m', $this->xmldata, $match)) { $in_encoding = strtoupper($match[2]); if ($in_encoding == 'ISO-8859-1') { // browsers treat the encodings like this, so we need iconv to do so as well $in_encoding = 'WINDOWS-1252'; }
if (PHP_VERSION >= '5' AND ($in_encoding != 'UTF-8' OR strtoupper($stylevar['charset']) != 'UTF-8')) { // this is necessary in PHP5 when try to output a non-support encoding $this->xmldata = str_replace($match[0], "$match[1]ISO-8859-1$match[3]", $this->xmldata); } } else { $in_encoding = 'UTF-8';
if (PHP_VERSION >= '5') { if (strpos($this->xmldata, '<?xml') === false) { // this is necessary if there's no XML tag, as PHP5 doesn't know what character set it's in, // so special characters die $this->xmldata = '<?xml version="1.0" encoding="ISO-8859-1"?>' . "\n" . $this->xmldata; } else { // xml tag doesn't have an encoding, which is bad $this->xmldata = preg_replace( '#(<?xml.*)(\?>)#', '\\1 encoding="ISO-8859-1" \\2', $this->xmldata ); }
$in_encoding = 'ISO-8859-1'; } }
$orig_string = $this->xmldata;
// this is the current user if its the admincp or the guest session for cron // should we stick with this or query the DB for the default language? $target_encoding = (strtolower($stylevar['charset']) == 'iso-8859-1' ? 'WINDOWS-1252' : $stylevar['charset']); $xml_encoding = (($in_encoding != 'UTF-8' OR strtoupper($stylevar['charset']) != 'UTF-8') ? 'ISO-8859-1' : 'UTF-8'); $iconv_passed = false;
if (strtoupper($in_encoding) !== strtoupper($target_encoding)) { // now we need to deal with those unknown character sets, meep! if (function_exists('iconv') AND $encoded_data = iconv($in_encoding, $target_encoding . '//TRANSLIT', $this->xmldata)) { $iconv_passed = true; $this->xmldata =& $encoded_data; }
if (!$iconv_passed AND function_exists('mb_convert_encoding') AND $encoded_data = @mb_convert_encoding($this->xmldata, $target_encoding, $in_encoding)) { $this->xmldata =& $encoded_data; } }
if ($this->parse($xml_encoding)) { return true; } else if ($iconv_passed AND $this->xmldata = iconv($in_encoding, $target_encoding . '//IGNORE', $orig_string)) { // this is probably happening because iconv is chopping off the string for some reason. // However, when //TRANSLIT fails, //IGNORE still sometimes works, so try that. if ($this->parse($xml_encoding)) { return true; } else { return false; } } else { return false; } }
Думаю, что проблему можно разрешить корректировкой в этой функции.
К сожелению я не очень большой спец в программировании... Типа читать могу, но писать не очень ;)
Поправте если я не прав.
Last edited by SMak044 : 08-30-2009 at 03:07 PM.
Reason: Добавлено сообщение
@SMak044
Эксперт
Join Date: May 2008
Награды в конкурсах:
Posts: 1,764
Версия vB: 3.8.4
Пол:
Reputation:
Expert 1707
Репутация в разделе: 201
0
Ну в общем проблему прямого импорта ньюсов из Гуггла в булку я не решил и Гугл ни слова в ответ.
Все поиски в нете не дали ничего конкретного.
Если бы я сам был гуру в пхп, то наверно бы нашел где сделать поправки в парсере. Например в проверку в случае отсутствия нужного заголовка....
Но как решить вопрос я все же нашел способ ;)
Не поверите в том же Гугле..... Фидбарнер мне помог.
Я просто создал ленту там и сказал что источник Гугл ньюс ;)
И о чудо!!!!!! Булка начала принимать rss нормально.
Конечно это изврат, но.....
В общем тему можно закрывать ;)
Всем кто пытался помочь СПАСИБО!