我需要在多个应用程序中生成RSS/Atom订阅源,并且我想知道一个能够生成两种格式并已经处理所有常见问题的好的库或类。
例如,我多年来使用的那个库没有为日期设置正确的格式,因此我的订阅源无法被多个聚合器正确处理。
更新: 为什么我正在寻找一个库?因为我多年来使用的那个库,我曾经对其进行了一些修改,但现在出现了一些小问题。也许某些规范没有被正确遵循。
我需要在多个应用程序中生成RSS/Atom订阅源,并且我想知道一个能够生成两种格式并已经处理所有常见问题的好的库或类。
例如,我多年来使用的那个库没有为日期设置正确的格式,因此我的订阅源无法被多个聚合器正确处理。
更新: 为什么我正在寻找一个库?因为我多年来使用的那个库,我曾经对其进行了一些修改,但现在出现了一些小问题。也许某些规范没有被正确遵循。
PHP通用Feed生成器看起来正是您需要的 - 它有一种简单的基于面向对象的方式来声明新的Feed并将其输出到您想要的规范。
它还具有内置的日期格式转换作为其中的一个特点。
功能:
- 生成RSS 1.0、RSS 2.0和ATOM 1.0源
- 所有源都经过验证通过
- 实现不同版本的合适命名空间
- 自动转换日期格式
- 为ATOM源生成UUID
- 处理必需标签的CDATA编码
支持版本:
- RSS 1.0 (正式淘汰了RSS 0.90)
- RSS 2.0 (正式淘汰了RSS 0.91、0.92、0.93和0.94)
- ATOM 1.0
对于非英文字符集,请查看PHP函数htmlentities:http://php.net/manual/en/function.htmlentities.php
我刚刚添加了对克罗地亚字符集的支持:
$nodeText .= (in_array($tagName, $this->CDATAEncoding))? $tagContent : htmlentities($tagContent, ENT_COMPAT, 'UTF-8');
在我看来,除非你需要封装,否则这两种格式都很容易制作,不需要使用任何类。例如,对于我管理的网站的RSS订阅,我只需编写一个小的Smarty模板即可,它运行得非常顺畅。
PHP通用Feed生成器是一个不错的选择。我只需要根据网页上的评论修改代码,以正确处理法语字符。
就像Kereste所说(6月1日)FeedWrite会出现一些非英语utf-8字符的问题,例如ä等。这是因为xml只知道5个实体(&,",')。因此,我将源代码中的第298行更改为$nodeText .= (in_array($tagName,$this->CDATAEncoding))? $tagContent : str_replace(array('&', '"', "'", ""), array('&', '"', ''', '<', '>'), $tagContent);以避免将字符转换为错误的xml实体。