Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] MySQL, simplexml_load_file, кодировка (http://forum.oszone.net/showthread.php?t=151627)

Artem-Samsung 27-09-2009 18:14 1228783

MySQL, simplexml_load_file, кодировка
 
К примеру экспортировать данные из RSS ленты http://soft.oszone.ru/rss/new-soft.xml в свою БД MySQL
Там кодировка windows-1251, у меня в таблице - cp1251_general_ci
Думал проблем не возникнет, но в самой таблице получаю:

<div><b>Обновлена: 24.09.2009</b></div>
<br />
Ideal DVD Copy – это простая программа, которая поможет сделать копию DVD-дисков. С ее помощью можно сделать точную копию диска, скопировать выбранные эпизоды или фильм полностью, исключив трейлеры,...<br /><br />
<div class="smallfont">Р*азмер: 2.9 РњР±<br />Язык: Английский<br />Лицензия: ShareWare</div><hr>



Код:

<?php

include('config.php');

$url = 'http://feeds.feedburner.com/filehippo?format=xml';
$rss = simplexml_load_file($url);

foreach ($rss->channel->item as $item) {

        $title = $item->title;
        $description = $item->description;
        $guid = $item->guid;

        $query_check = "SELECT `id` FROM `de_rss_export` WHERE `title` = '$title' AND `guid` = '$guid'";
        $sql_check = mysql_query($query_check);
        $check = mysql_num_rows($sql_check);

        if ($check == 0) {
                $date = time();
                $description = addslashes($description);
                $title = addslashes($title);
               
                $sql = mysql_query("INSERT INTO `de_rss_export`
                (`title`, `description`, `date`, `guid`, `from`, `link` )
                VALUES ('$title', '$description', '$date', '$guid', 'FileHippo',
                'http://www.filehippo.com/');");
                echo "INSERT INTO `de_rss_export`
                (`title`, `description`, `date`, `guid`, `from`, `link` )
                VALUES ('$title', '$description', '$date', '$guid', 'FileHippo',
                'http://www.filehippo.com/');<br /><br />";
               
        }
}

?>


Sham 27-09-2009 19:18 1228821

Цитата:

Цитата Artem-Samsung
$url = 'http://feeds.feedburner.com/filehippo?format=xml' »

там UTF-8 - нужно конвертировать iconv или другой... проверьте сначала кодировку текста RSS без базы..

Artem-Samsung 27-09-2009 19:46 1228839

ой, сорри.
Я заменяю http://feeds.feedburner.com/filehippo?format=xml на http://soft.oszone.ru/rss/new-soft.xml и получаю крокозяблики

Sham 27-09-2009 20:37 1228880

проверьте, что на выходе после simplexml-load-file (если неясно, где кодировку меняет). если виновата функция, то мб нужно параметров добавить...

Artem-Samsung 27-09-2009 21:40 1228922

Проверял, на выходе норм.
делал же:

echo "INSERT INTO `de_rss_export`
(`title`, `description`, `date`, `guid`, `from`, `link` )
VALUES ('$title', '$description', '$date', '$guid', 'FileHippo',
'http://www.filehippo.com/');<br /><br />";

Sham 27-09-2009 22:38 1228965

SET NAMES 'cp1251' перед выборкой делается?

Artem-Samsung 27-09-2009 23:15 1228997

Цитата:

Цитата Sham
SET NAMES 'cp1251' перед выборкой делается? »

Крокозяблики я наблюдаю через phpmyadmin

Artem-Samsung 27-09-2009 23:32 1229011

Даже не знаю, может поможет то, что файл на выполнении в cron под линукс?
0 */1 * * * /usr/bin/php /web/sites/deykun.com/class.rss-export.php

Artem-Samsung 27-09-2009 23:50 1229044

Аналогичные крокозяблики и когда пытаюсь экспортировать в Базу http://itc.ua/rss.xml
Но там уже utf-8

Но я делаю так:

$title = $item->title;
$description = $item->description;

$title = mb_convert_encoding($title, "windows-1251", "utf-8");
$description= mb_convert_encoding($description, "windows-1251", "utf-8");


Не помагает, хотя на www.deykun.com у меня спокойно отображается с такой вот конвертацией кодировки только на прямую, без БД
(Внизу под заголовком "Новини інформаційних технологій")

Sham 28-09-2009 00:50 1229088

Надо с кодировками разобраться (самой базы и соединения с базой) - там не один параметр, и нужно соответствие всех...

Artem-Samsung 30-09-2009 02:08 1230829

Получилось вот так:

$title = mb_convert_encoding($title, "windows-1251", "auto");
$description= mb_convert_encoding($description, "windows-1251", "auto");

таким образом, какой бы кодировка изначально не была, она превратится вwindows-1251 ;)

Может кому то будет полезно


Время: 01:41.

Время: 01:41.
© OSzone.net 2001-