перекодировка из win в utf ... (php)

12
Сергей Владимирович
На сайте с 24.08.2008
Offline
121
1246

Приветствую !

Не силен я в пхп, но встала задача написать простенький парсер.

В общем малость погуглив ( подумав ... ) получилось так :

<?

$link = mysql_connect("localhost", "klogin", "passwors")

or die("Could not connect: " . mysql_error());

print ("Connected successfully");

mysql_select_db('baza', $link) or die ('Can\'t use baza: ' . mysql_error());

$url = 'http://donor.ru/1_full.rss'; //адрес RSS ленты

$rss = simplexml_load_file($url); //Интерпретирует XML-файл в объект

//цикл для обхода всей RSS ленты

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

echo '<h1>'.$item->title.'</h1>'; //выводим на печать заголовок статьи

echo $item->description; //выводим на печать текст статьи

$qq="4"; // категория куда постим

$qqq=rand(1,10000); // ид новости

$qqqq=rand(1,100); // картинка ! надо обдумать

$qqqqq=rand(1,100); // сколько раз читали новость

$data=date("l dS of F Y h:I:s A");

$sql = "INSERT INTO `news_block` (`record_id`, `section`, `title`, `brief`, `message`, `time`, `photo`, `views_amount`) VALUES

($qqq, $qq, '$item->title', '$item->title', '$item->description', '$data', '$qqqq', $qqqqq)";

mysql_query($sql) or die('SQL ERROR:'.mysql_error());

}

mysql_close($link);

?>

прошу сильно не смеяться я не программер, сделал как могу ...

Но есть проблема рсс лента идет в кодировке <?xml version="1.0" encoding="windows-1251"?>

а двиг куда постим на утв8

Вопрос как сделать чтобы кодировка перед внесением в базу преобразовалась в нужную ?

Если кто может доработать его до нормального состояния ( работы с картинками на пример ... ( пожеланий много ) можете написать в лс , готов предложить ганарар 1к рублей )

Массовый постинг на AVITO.RU | IRR.RU (http://job.consultant-plus.com/)
[Удален]
#1
Сергей Владимирович:
$rss = simplexml_load_file($url); //Интерпретирует XML-файл в объект

на этом этапе происходит автоматическая конвертация cp1251 => utf8 если я не ошибаюсь на память ...

если у вас так не получается, то это значит что в базу пытаетесь писать utf8 данные через стандартные для недохостингов настройки соединения = тобишь через latin1 кодировку, соответственно получается жопа.

совет: после mysql_connect

сделайте mysql_query("SET NAMES utf8");

и уверен на 99% это поможет на ура :)

seodude добавил 12.02.2011 в 16:48

Сергей Владимирович:
можете написать в лс

интересно тз на добавки, писаните в лс плз что хотите за этот 1к)

ParserYa
На сайте с 04.10.2010
Offline
29
#2
Сергей Владимирович:

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

Внутри этого цикла добавьте преобразование $item->title = iconv("windows-1251","UTF-8",$item->title); и аналогично для всех строк.

Сергей Владимирович
На сайте с 24.08.2008
Offline
121
#3

большое спасибо ( seodude )

Ваш совет помог решить проблему )))

Может у кого есть желание научить этот недопрасер нормально работать с картинками ? ( в лс скидывайте расценки )

[Удален]
#4

ParserYa, вы пробовали это делать или просто потроллить отписали? 🤣

ParserYa
На сайте с 04.10.2010
Offline
29
#5

seodude, 100500 раз. Контекст может чуть другой, но суть такая.

[Удален]
#6

ParserYa, объект через конвертер пропускать?))) разве функция не со строками работает? я попробовал в консоли - у меня вообще ничего не вывело))

ParserYa
На сайте с 04.10.2010
Offline
29
#7

seodude, объект в данном случае $rss, а когда применяем цикл foreach ($rss->channel->item as $item), то в $item->title уже будет строка - разве нет?

[Удален]
#8

ParserYa, тут вы правы, но не объект же через него пропускать rss = iconv . rss 🤣

ДП
На сайте с 23.11.2009
Offline
203
#9
ParserYa:
seodude, объект в данном случае $rss, а когда применяем цикл foreach ($rss->channel->item as $item), то в $item->title уже будет строка - разве нет?

Ну формально это объект - object(SimpleXMLElement), но имеет метод __toString, поэтому имеет строковое представление.

ParserYa
На сайте с 04.10.2010
Offline
29
#10
seodude:
ParserYa, тут вы правы, но не объект же через него пропускать rss = iconv . rss

Дак это я спросони написал $rss = iconv... Перечитал, и тут же исправил - даже сообщения о том, что редактировал не появилось :) Я же не виноват, что вы мой бред, написанный с полузакрытыми глазами, успели прочитать :)

12

Авторизуйтесь или зарегистрируйтесь, чтобы оставить комментарий