Войти

Показать полную графическую версию : [решено] MySQL, simplexml_load_file, кодировка


Artem-Samsung
27-09-2009, 18:14
К примеру экспортировать данные из 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
$url = 'http://feeds.feedburner.com/filehippo?format=xml' »
там UTF-8 - нужно конвертировать iconv или другой... проверьте сначала кодировку текста RSS без базы..

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

Sham
27-09-2009, 20:37
проверьте, что на выходе после simplexml-load-file (http://docs.php.net/manual/ru/function.simplexml-load-file.php) (если неясно, где кодировку меняет). если виновата функция, то мб нужно параметров добавить...

Artem-Samsung
27-09-2009, 21:40
Проверял, на выходе норм.
делал же:

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
SET NAMES 'cp1251' перед выборкой делается?

Artem-Samsung
27-09-2009, 23:15
SET NAMES 'cp1251' перед выборкой делается? »
Крокозяблики я наблюдаю через phpmyadmin

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

Artem-Samsung
27-09-2009, 23:50
Аналогичные крокозяблики и когда пытаюсь экспортировать в Базу 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
Надо с кодировками разобраться (самой базы и соединения с базой (http://dev.mysql.com/doc/refman/5.4/en/charset-connection.html)) - там не один параметр, и нужно соответствие всех...

Artem-Samsung
30-09-2009, 02:08
Получилось вот так:

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

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

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




© OSzone.net 2001-2012