2013-03-19 2 views
2

Я использую SimplePie (v1.3.1) для отображения RSS-канала на веб-странице. Один из названий содержит знак евро (€), и он отображается как ¬ на странице. Когда я использую демонстрацию SimplePie на своем сайте , он отображается правильно, поэтому это не должно быть проблемой. Однако я не могу заставить его работать.PHP - специальный символ (знак евро) отображается неправильно (RSS-канал/SimplePie)

То, что я уже сделал:

  • Поиск на веб-сайте SimplePie и документации
  • Поиск на сайте StackOverflow в
  • Поиск на Google
  • Пробовал десятки данных «решений» без удачи

Что я могу найти, так это то, что это, вероятно, проблема кодирования символов, и насколько я знаю, это должен быть установлен в UTF-8. Beneith - это мой текущий тестовый код, основанный на демонстрации SimplePie. Я уже добавил 3 заданных решения по часто задаваемым вопросам SimplePie (см. I'm seeing weird characters).

Что я делаю неправильно?

<?php 
header('Content-type:text/html; charset=utf-8'); 
// Make sure SimplePie is included. You may need to change this to match the location of autoloader.php 
// For 1.3+: 
require_once('./php/autoloader.php'); 

// We'll process this feed with all of the default options. 
$feed = new SimplePie(); 

// Set the feed to process. 
$feed->set_feed_url(***RSS_FEED_URL_HERE***); 

// Run SimplePie. 
$feed->init(); 

// This makes sure that the content is sent to the browser as text/html and the UTF-8 character set (since we didn't change it). 
$feed->handle_content_type(); 

// Let's begin our XHTML webpage code. The DOCTYPE is supposed to be the very first thing, so we'll keep it on the same line as the closing-PHP tag. 
?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en-US" lang="en-US"> 
<head> 
    <title>Sample SimplePie Page</title> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8" /> 
    <style type="text/css"> 
    /*some css*/ 
    </style> 
</head> 
<body> 
    <div class="header"> 
     <h1><a href="<?php echo $feed->get_permalink(); ?>"><?php echo $feed->get_title(); ?></a></h1> 
     <p><?php echo $feed->get_description(); ?></p> 
    </div> 
    <?php 
    foreach ($feed->get_items() as $item): 
    ?> 
     <div class="item"> 
      <h2><a href="<?php echo $item->get_permalink(); ?>"><?php echo $item->get_title(); ?></a></h2> 
      <p><?php echo $item->get_description(); ?></p> 
      <p><small>Posted on <?php echo $item->get_date('j F Y | g:i a'); ?></small></p> 
     </div> 
    <?php endforeach; ?> 
</body> 
</html> 

[EDIT] Подробнее:

  • XML, из RSS имеет UTF-8 кодировке (<?xml version="1.0" encoding="UTF-8"?>)
  • Использование echo str_replace("€", "&euro;", $item->get_title()); работ, но не очень приятно
+0

До тех пор, пока у меня нет лучшего ответа, я использовал идею Гарета о замене строки. Хотя это работает (здесь не удивительно), я действительно надеюсь на более прочное решение. – 4ice

ответ

0

Заменить символ специальным символом.

&euro; 

если делает: €

http://www.utexas.edu/learn/html/spchar.html

+0

RSS-канал с другой страницы, поэтому я не могу вносить здесь никаких изменений. – 4ice

+0

Ну, это не выгодно. О. Запустите строку, заменяющую данные, вытащенные из RSS.Скорее всего, это более простой способ решить это, но я не могу думать об этом с головы. –

+0

Замена строки, вероятно, будет работать, но это было бы моим последним средством, поскольку это не «чистое» решение. Надеюсь, у кого-то есть другие идеи. В любом случае, спасибо за вклад. – 4ice

0

Насколько я могу видеть ваши проблемы является содержание, опубликованное в корм не в UTF-8, даже если ваша страница в UTF-8 ,

Все, что вам нужно сделать, это использовать этот

<?php 
utf8_encode ($feed)// the rss feed from another page 
?> 

Надежда, которая решает ваш вопрос

+0

К сожалению, нет. Это ничего не меняет. – 4ice

+0

[link] (http://stackoverflow.com/questions/6559822/how-to-convert-any-character-encoding-to-utf8-on-php) может помочь вам – cooldude5757

+0

Пробовал данные возможности по вашей ссылке, но не изменить результат. Кодировка XML-канала RSS установлена ​​в 4ice

3

У меня также была проблема, где знак евро был показан как «â,¬» После того, как возился с кодировкой на некоторое время без успеха, я просто пошел с последующей заменой строки:

str_replace(chr(0xE2).chr(0x82).chr(0xAC), '&euro;', $mystring) 

Как показано на http://www.mauserrifle.nl/php/php-and-replacing-euro-signs/. Поскольку это была базовая работа, у меня не было проблем с потерей производительности.

Смежные вопросы