【问题标题】:rss feed xml ISO-8859-7 encoding shows greek characters as question marksrss feed xml ISO-8859-7 编码将希腊字符显示为问号
【发布时间】:2014-03-28 00:41:20
【问题描述】:

使用php生成xml rss feed。

PHP 代码:

<?php
header("Content-Type: application/rss+xml; charset=utf-8");

$rssfeed = '<?xml version="1.0" encoding="utf-8"?>';
$rssfeed .= '<rss version="2.0">';
$rssfeed .= '<channel>';
$rssfeed .= '<title>Events on Spotlight | StudentLife.com.cy</title>';
$rssfeed .= '<link>http://spotlight.studentlife.com.cy</link>';
$rssfeed .= '<description>All the events that student may be interested in.</description>';
$rssfeed .= '<language>en-us</language>';
$rssfeed .= '<copyright>Copyright (C) 2014 studentlife.com.cy</copyright>';

$today= strtotime("now");
$today=date('Y-m-d',$today);
$later= strtotime("+1 week");
$later=date('Y-m-d',$later);


$db = mysql_connect($db_host, $db_user, $db_pass);
if (!$db) {
 die('Could not connect: ' . mysql_error());
}

mysql_select_db($db_name,$db);

$result = mysql_query("SELECT p.ID,  m1.meta_value as event_address, m2.meta_value as event_date, p.post_title,p.guid as link
from events_posts p
inner join events_postmeta m1
on p.ID=m1.post_id and p.post_type='event' and (p.post_status='publish' or p.post_status='recurring') 
and m1.meta_key='address'
inner join events_postmeta m2
on p.ID=m2.post_id and p.post_type='event' and (p.post_status='publish' or p.post_status='recurring') 
and m2.meta_key='st_date'
and m2.meta_value between '".$today."' and '".$later."'
order by p.ID", $db);


  while($row = mysql_fetch_array($result)) {
        extract($row);

        $rssfeed .= '<item>';
        $rssfeed .= '<title>' . $post_title . '</title>';
        $rssfeed .= '<description>' . $event_address . '</description>';
    $rssfeed .= '<link>' . $link . '</link>';
        $rssfeed .= '<pubDate>' . date("D, d M Y H:i:s O", strtotime($event_date)) . '</pubDate>';
        $rssfeed .= '</item>';
    }

$rssfeed .= '</channel>';
$rssfeed .= '</rss>';

mysql_close($db);

$rssfeed=preg_replace('/&(?!#?[a-z0-9]+;)/', '&amp;', $rssfeed);



$fp = fopen("rss.xml","wb");
fwrite($fp,$rssfeed);
fclose($fp);
?>

我的数据库中的编码是 utf8_bin。您可以在http://studentlife.com.cy/cron.php 执行文件并在http://studentlife.com.cy/rss.xml 查看结果。

xml 给我一个编码错误

【问题讨论】:

  • 您说您响应的浏览器/xml 在此字符集中。这并不意味着你输出的字符串真的是这样编码的。
  • 那么我应该在我的数据库中挖掘字符串的编码吗?
  • 首先要查看数据库连接的编码。但是,如果可能的话,在您的脚本中使用 UTF-8,并且仅当您需要输出不同的字符集时,请在最后一刻转换数据。 Unicode 可以包含比 ANSI 字符集更多的字符。
  • 我的数据库的编码是utf8_bin。我编辑我的帖子并附上我的 php 代码供您查看。
  • 数据库连接编码不依赖于数据库架构或字段的编码。想想看,即使同一张表中的不同字段也可以有不同的字符集/编码选项。见php.net/manual/en/mysqli.set-charset.php

标签: php xml encoding utf-8 rss


【解决方案1】:

我要感谢 ThW 他的 cmets。解决方案是使用 mysqli 连接到您的数据库,然后使用

将字符集设置为 UTF-8
mysqli_set_charset($link, "utf8");

mysqli_set_charset() 设置从数据库服务器发送数据和向数据库服务器发送数据时使用的默认字符集。

documentation

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-01-18
    • 1970-01-01
    • 1970-01-01
    • 2010-12-02
    • 2011-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多