@skyfly2010

Как решить проблему с кодировками UTF-8 без BOM и просто utf-8?

Добрый день. Задумал я написать ленту rss сообщений и столкнулся неожиданно с проблемой.
Код получения данных по rss:
function utf8_convert($str, $type)
{
static $conv = '';
if (!is_array($conv))
{
$conv = array();
for ($x=128; $x <= 143; $x++)
{
$conv['utf'][] = chr(209) . chr($x);
$conv['win'][] = chr($x + 112);
}
for ($x=144; $x<= 191; $x++)
{
$conv['utf'][] = chr(208) . chr($x);
$conv['win'][] = chr($x + 48);
}
$conv['utf'][] = chr(208) . chr(129);
$conv['win'][] = chr(168);
$conv['utf'][] = chr(209) . chr(145);
$conv['win'][] = chr(184);
}
if ($type == 'w')
{
return str_replace($conv['utf'], $conv['win'], $str);
}
elseif ($type == 'u')
{
return str_replace($conv['win'], $conv['utf'], $str);
}
else
{
return $str;
}
}

echo '<h1><font color="red">Название бла-бла-бла</font></h1>';
$url = $_POST['rss']; //адрес RSS ленты

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

//цикл для обхода всей RSS ленты
foreach ($rss->channel->item as $item) {
echo '<a href="'.$item->link.'">';
echo '<h2>'.utf8_convert($item->title,"w").'</h2>'; //выводим на печать заголовок статьи 
echo '</a>';
echo utf8_convert($item->description,"w"); //выводим на печать текст статьи
}

Суть проблемы:
Страница вывода ленты у меня в UTF-8.

Так вот, если сохранить файл страницы при помощи notepad++ в utf-8 - то все текстовые элементы, которые на русском, кроме самой ленты отображаются нормально, если же сохранить с utf-8 без BOM, то лента отображается нормально, а весь остальной текст идет иероглифами. Подскажите что делать?
  • Вопрос задан
  • 224 просмотра
Решения вопроса 1
Melkij
@Melkij
PostgreSQL DBA
Вот этот странный колхоз - это вы кастрированный iconv в cp1251 сделать пытаетесь? Вроде по поведению похоже.

Страница вывода ленты у меня в UTF-8.

И simplexml всегда в UTF8. Что вы тут пытаетесь сделать с бедным юникодом я не очень понимаю.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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