PHP-特殊字符(欧元符号)未正确显示(RSS提要/SimplePie)

PHP-特殊字符(欧元符号)未正确显示(RSS提要/SimplePie),php,character-encoding,rss,simplepie,Php,Character Encoding,Rss,Simplepie,我正在使用SimplePie(v1.3.1)在网页上显示RSS提要。其中一个标题包含欧元(€)符号,并在页面上显示为–号。当我在他们的网站上使用SimplePie的演示时,显示正确,所以应该没有问题。但是我不能让它工作 我已经做了: 搜索SimplePie的网站和文档 在stackoverflow的网站上搜索 在谷歌上搜索 在没有任何运气的情况下尝试了几十种给定的“解决方案” 我能发现的是,这可能是一个字符编码问题,据我所知,这应该设置为UTF-8。Beneith是我当前的测试代码,基于Si

我正在使用SimplePie(v1.3.1)在网页上显示RSS提要。其中一个标题包含欧元(€)符号,并在页面上显示为–号。当我在他们的网站上使用SimplePie的演示时,显示正确,所以应该没有问题。但是我不能让它工作

我已经做了:

  • 搜索SimplePie的网站和文档
  • 在stackoverflow的网站上搜索
  • 在谷歌上搜索
  • 在没有任何运气的情况下尝试了几十种给定的“解决方案”
我能发现的是,这可能是一个字符编码问题,据我所知,这应该设置为UTF-8。Beneith是我当前的测试代码,基于SimplePie演示。我已经在SimplePie的FAQ中添加了3个给定的解决方案(请参阅)

我做错了什么

<?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>

SimplePie页面示例
/*一些css*/

张贴在

[编辑] 更多信息:

  • RSS中的XML具有UTF-8编码(
  • 使用
    echo stru_-replace(““--”,“&euro;”,$item->get_title())工作,但不是很好

用特殊字符实体替换符号

&euro;
如果制造:€


用特殊字符实体替换符号

&euro;
如果制造:€


据我所知,您的问题是,即使您的页面是UTF-8格式,提要发布的内容也不是UTF-8格式

你所要做的就是用这个

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


希望这能解决您的问题

据我所知,您的问题是feed发布的内容不是UTF-8格式,即使您的页面是UTF-8格式

你所要做的就是用这个

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


希望这能解决您的问题

我也遇到了一个问题,即欧元符号显示为“–-”,在对编码进行了一段时间的修改后,没有成功,我只是使用了以下字符串替换:

str_replace(chr(0xE2).chr(0x82).chr(0xAC), '&euro;', $mystring)
如图所示。
因为这是一个后端作业,所以我对性能损失没有任何问题。

我还遇到了一个问题,即在对编码进行了一段时间的修改后,欧元符号显示为“–”,但没有成功,我只进行了以下字符串替换:

str_replace(chr(0xE2).chr(0x82).chr(0xAC), '&euro;', $mystring)
如图所示。

因为这是一个后端作业,所以我对性能损失没有任何问题。

RSS源来自另一个页面,因此我无法在此处进行任何更改。这没有任何好处。O.O对从RSS提取的数据运行字符串替换。很可能有一个更简单的方法解决这个问题,但我不能马上想出来。替换字符串可能会奏效,但这将是我的最后手段,因为它不是一个“干净”的解决方案。希望其他人有其他想法。无论如何,感谢您的输入。替换原始内容永远不会干净,但不客气。我很高兴您在某种程度上考虑到了我的输入。:)RSS源来自另一个页面,因此我无法在这里进行任何更改。这对O.O运行字符串替换从RSS提取的数据没有任何好处。很可能有一个更简单的方法解决这个问题,但我不能马上想出来。替换字符串可能会奏效,但这将是我的最后手段,因为它不是一个“干净”的解决方案。希望其他人有其他想法。无论如何,感谢您的输入。替换原始内容永远不会干净,但不客气。我很高兴您在某种程度上考虑到了我的输入。:)不切实际的不是。这不会改变任何事情。可能有助于您在链接上尝试给定的可能性,但不会改变结果。RSS提要XML的编码设置得很好,那么您只能做一件事:字符串替换我怀疑,就像我说的:SimplePie上的在线演示正在工作,所以应该可以修复(我不认为SimplePie正在使用字符串替换)。事实并非如此。这不会改变任何事情。可能有助于您在链接上尝试给定的可能性,但不会改变结果。RSS提要XML的编码设置得很好,那么只有一件事可以做:字符串替换我怀疑,就像我说的:SimplePie上的在线演示正在工作,所以应该可以修复(我不认为SimplePie正在使用字符串替换)。只要我没有更好的答案,我就使用Gareth的字符串替换思想。虽然这是可行的(在这里并不奇怪),但我真的希望有一个更可靠的解决方案。只要我没有更好的答案,我就使用Gareth的字符串替换思想。虽然这是可行的(这并不奇怪),但我真的希望有一个更坚实的解决方案。