smidl
@smidl
WordPress-разработчик

Как изменить кодировку из utf-8 на windows-1251 для сериализированного массива или json?

Добрый день, есть функция, которая формирует нужный мне массив, сериализирует его и кладет в текстовый файл. Но сайт работает на UTF-8.

// Сама функция для формирования файла
function makePost() {

// Получим посты
global $post; $args = array( 'posts_per_page' => 3,  'category' => 3 ); $myposts = get_posts( $args );

// Составим нужный нам массив
$tofile = [];
$i_count = 0;

foreach ($myposts as $item) {
	$tofile[$i_count]['title'] = $item->post_title;
	$tofile[$i_count]['link'] =  $item->guid;
	$tofile[$i_count]['image'] = get_the_post_thumbnail_url( $item->ID );
	$tofile[$i_count]['text'] = $item->post_excerpt;

	$i_count++;
}

$tofile = serialize($tofile);

// Открыть текстовый файл и запишем туда сериализованный массив
	$f = fopen("textfile.txt", "w");
	file_put_contents($f, '');

	// Записать строку текста
	fwrite($f, $tofile); 

	// Закрыть текстовый файл
	fclose($f);
}


Я тяну с другого сайта (сайт на кодировке 1251) этот текстовый файл и с помощью unserialize использую его как массив и вывожу массив...

<?php

function get_yposts() {

// Источник для парсера
$url ='http://site.info/textfile.txt';

$ch = curl_init(); // initialize curl handle
curl_setopt($ch, CURLOPT_URL, $url); // set url to post to
curl_setopt($ch, CURLOPT_FAILONERROR, 1); // Fail on errors
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); // return into a variable
curl_setopt($ch, CURLOPT_TIMEOUT, 15); // times out after 15s

$doc = curl_exec($ch);
$posts = unserialize($doc);
$posts = iconv('utf-8', 'windows-1251', $posts);


foreach ($posts as $post) {
echo "<div class='yt-post'>";
echo "<a class='yt-title' href='".$post['link']."'>";
echo "<img class='yt-post' src='".$post['image']."'>";
echo "</a>";
echo "<a class='yt-title' href='".$post['link']."'>".$post['title']."</a>";
echo "<p class='yt-text'>".$post['text']."</p>";

echo "</div>";

}

}

get_yposts();


?>


Крякозябры одни. Не пойму как использовать iconv в данном случае.
  • Вопрос задан
  • 2872 просмотра
Решения вопроса 1
alsopub
@alsopub
Если вы тянете данные с сайта, где кодировка Windows-1251, то поменяйте местами кодировки в iconv для конвертации Win1251 -> UTF8, а не наоборот как сейчас.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
mrKhatter
@mrKhatter
программист
Лови! ;)
...
$posts = iconv( 'windows-1251', 'utf-8', $posts);
...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы