PHP 正则表达式分析RSS

近做了一个读取中国新闻网RSS的页面。首先是把RSS文档下载下来保存到本地

复制代码 代码如下:

$xmlfile = 'news/'.date('YmdH').'.xml';
$sourcexml = 'http://www.chinanews.com.cn/rss/scroll-news.xml';
if( !file_exists($xmlfile) ) {
$str = @file($sourcexml) or die('加载文件时出错。');
$fp = fopen($xmlfile,'w') or die('写缓存失败!');
fputs($fp,$str);
fclose($fp);

然后用simplexml读取并输出HTML
复制代码 代码如下:

$xml = simplexml_load_file($xmlfile);
$c = $xml->channel;
$k = 0;
foreach($c->item as $v) {
$k ++;
echo "

";

后来遇到了一个问题,就是RSS中经常包含有一些GBK的繁体字。google了很多字符集转换方面的文章。得出一个解法:
复制代码 代码如下:

$str = mb_convert_encoding( join('',$str), "gb2312", "GBK");

这个方法并不能繁体转为简体,会转成一个乱码,但至少能保证simplexml_load_file($xmlfile)执行成功。因为这些繁体字通常出现在描述里
,暂且接受。
再后来遇到另一个问题,描述里出现了形如“中新网12月30日电(闻育e?”的乱码,simplexml_load_file失败。
至此考虑用正则表达式获取标题和链接。(有文章说正则表达式效率可能更好,以后再验证)
代码如下:
复制代码 代码如下:

$fp = fopen($xmlfile,'r');
if($fp)
{
$data = fread($fp,filesize($xmlfile));
fclose($fp);
preg_match_all(
"/(.*?)<\/title><link>(.*?)<\/link>/i",$data,$out,PREG_SET_ORDER); <br>foreach($out as $key => $v) <br>{ <br>$v[1] = iconv('gbk','utf-8',$v[1]); <br>echo " <br><div class=\"newsline\">・<a title=\"$v[1]\" href=\"$v[2]\" target=\"_blank\">$v[1]</a></div><br>"; <br>} <br>} <br></div></div><p>以上就是PHP 正则表达式分析RSS的详细内容,更多请关注0133技术站其它相关文章!</p></article><div class="post-actions"><a href="javascript:;" etap="like" class="post-like action action-like" data-pid="0"><i class="fa fa-thumbs-o-up"></i>赞(<span>0</span>)</a><a href="javascript:;" class="action action-rewards" data-event="rewards"><i class="fa fa-jpy"></i> 打赏</a></div><div class="post-copyright">未经允许不得转载:<a href="/">0133技术站首页</a> » <a href="/cate156/">正则表达式</a></div><!--<div class="article-tags">标签:<a href="/archives/tag/javascript" rel="tag">JavaScript</a><a href="/archives/tag/%e5%be%ae%e4%bf%a1" rel="tag">微信</a><a href="/archives/tag/%e5%be%ae%e4%bf%a1%e7%9a%84%e7%89%88%e6%9c%ac%e5%8f%b7" rel="tag">微信的版本号</a><a href="/archives/tag/%e7%89%88%e6%9c%ac%e5%8f%b7" rel="tag">版本号</a><a href="/archives/tag/%e8%af%ad%e4%b9%89%e5%8c%96" rel="tag">语义化</a></div>--><nav class="article-nav"><span class="article-nav-prev">上一篇<br><a href="/cate156/11478850120100.html" rel="prev">asp 正则 过滤重复字符串的代码</a></span><span class="article-nav-next">下一篇<br><a href="/cate156/11478863960000.html" rel="next">15/18位身份证号码验证的正则表达式总结(详细版)</a></span></nav><div class="relates relates-thumb"><div class="title"><h3>相关文章</h3></div><ul><li><a href="/cate156/1114680917225.html"><img data-src="https://ss.0133.cn/article/58/93/a1/5893a175f403b71a1ad32a1cbe84cb91.jpg-160" alt="shell脚本中的正则表达式详解" class="thumb"></a><a href="/cate156/1114680917225.html">shell脚本中的正则表达式详解</a></li><li><a href="/cate156/1114682128900.html"><img data-src="https://ss.0133.cn/article/25/a3/32/25a332f54bad49b74d6fcd16df9aba80.jpg-160" alt="正则表达式常见的4种匹配模式小结" class="thumb"></a><a href="/cate156/1114682128900.html">正则表达式常见的4种匹配模式小结</a></li><li><a href="/cate156/1114683340625.html"><img data-src="https://ss.0133.cn/article/21/72/f5/2172f59e9032dcdf3044f38514f38921.jpg-160" alt="正则表达式分组与引用的使用" class="thumb"></a><a href="/cate156/1114683340625.html">正则表达式分组与引用的使用</a></li><li><a href="/cate156/1114684552400.html"><img data-src="https://ss.0133.cn/article/6b/2e/13/6b2e130b5cf99e2ebdb5bba217bf1f2a.jpg-160" alt="正则表达式量词与贪婪的使用详解" class="thumb"></a><a href="/cate156/1114684552400.html">正则表达式量词与贪婪的使用详解</a></li><li><a href="/cate156/1114685764225.html"><img data-src="https://ss.0133.cn/article/90/a7/e7/90a7e76c3f78b518b4ccd7261e3581ab.jpg-160" alt="正则表达式那些让人头晕的元字符" class="thumb"></a><a href="/cate156/1114685764225.html">正则表达式那些让人头晕的元字符</a></li><li><a href="/cate156/1114686976100.html"><img data-src="https://ss.0133.cn/article/5e/a8/aa/5ea8aa158b3b9ddccaf028b36c2956bb.jpg-160" alt="Idea使用正则表达式批量替换字符串的方法" class="thumb"></a><a href="/cate156/1114686976100.html">Idea使用正则表达式批量替换字符串的方法</a></li><li><a href="/cate156/1114688188025.html"><img data-src="https://ss.0133.cn/article/5e/a8/aa/5ea8aa158b3b9ddccaf028b36c2956bb.jpg-160" alt="Java正则表达式实现经纬度的合法性操作" class="thumb"></a><a href="/cate156/1114688188025.html">Java正则表达式实现经纬度的合法性操作</a></li><li><a href="/cate156/1114689400000.html"><img data-src="https://ss.0133.cn/article/5d/06/ab/5d06abb507dfcb6223c0ea195586a877.jpg-160" alt="Java正则表达式里隐藏的陷阱" class="thumb"></a><a href="/cate156/1114689400000.html">Java正则表达式里隐藏的陷阱</a></li></ul></div><!-- <div class="title" id="comments"><h3>评论 <small>抢沙发</small></h3></div><div id="respond" class="no_webshot"><form action="return false;" method="post" id="commentform"><div class="comt"><div class="comt-title"><img data-src="https://secure.gravatar.com/avatar/?s=100&d=mm" class="avatar avatar-100" height="50" width="50"><p><a id="cancel-comment-reply-link" href="javascript:;">取消</a></p></div><div class="comt-box"><textarea placeholder="你的评论可以一针见血" class="input-block-level comt-area" name="comment" id="comment" cols="100%" rows="3" tabindex="1" onkeydown="if(event.ctrlKey&&event.keyCode==13){document.getElementById('submit').click();return false};"></textarea><div class="comt-ctrl"><div class="comt-tips"><input type='hidden' name='comment_post_ID' value='6053' id='comment_post_ID'/><input type='hidden' name='comment_parent' id='comment_parent' value='0'/><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="40dd7081eb"/></p><label for="comment_mail_notify" class="checkbox inline hide" style="padding-top:0"><input type="checkbox" name="comment_mail_notify" id="comment_mail_notify" value="comment_mail_notify" checked="checked"/>有人回复时邮件通知我</label><p style="display: none;"><input type="hidden" id="ak_js" name="ak_js" value="245"/></p></div><button type="button" name="submit" id="submit" tabindex="5">提交评论</button>--><!-- <span data-type="comment-insert-smilie" class="muted comt-smilie"><i class="icon-thumbs-up icon12"></i> 表情</span> --><!-- </div></div><div class="comt-comterinfo" id="comment-author-info"><ul><li class="form-inline"><label class="hide" for="author">昵称</label><input class="ipt" type="text" name="author" id="author" value="" tabindex="2" placeholder="昵称"><span class="text-muted">昵称 (必填)</span></li><li class="form-inline"><label class="hide" for="email">邮箱</label><input class="ipt" type="text" name="email" id="email" value="" tabindex="3" placeholder="邮箱"><span class="text-muted">邮箱 (必填)</span></li><li class="form-inline"><label class="hide" for="url">网址</label><input class="ipt" type="text" name="url" id="url" value="" tabindex="4" placeholder="网址"><span class="text-muted">网址</span></li></ul></div></div></form></div>--></div></div><div class="sidebar"><div class="widget widget_ui_tags"><h3>编程</h3><div class="items"><a href="/cate104/">Java</a><a href="/cate105/">C语言</a><a href="/cate133/">新手学堂</a><a href="/cate149/">数据库</a><a href="/cate151/">ASP编程</a><a href="/cate153/">PHP编程</a><a href="/cate154/">XML/RSS</a><a href="/cate155/">Flex</a><a href="/cate156/">正则表达式</a><a href="/cate158/">R语言</a><a href="/cate159/">汇编语言</a><a href="/cate160/">其他教程</a><a href="/cate165/">移动</a></div></div><form method="get" class="search-form clearfix" id="search-formhybrid-search" target="_blank" action="/search/article/"><div class="search-input-wrap"><input type="text" class="search-text" placeholder="来搜我" name="word" id="search-texthybrid-search" value="" data-placeholder=""><b class="search-liaosheji"></b><button type="submit" class="search-button"><i class="icon-search"></i></button></div></form><div style="text-align:center;margin:0 auto;"><ul class='hot-search layui-clear'><li style="float:left;margin-right:20px;">热门搜索:</li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=php正则表达式'>php正则表达式</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=PHP常用正则表达式'>PHP常用正则表达式</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=正则表达式'>正则表达式</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=js正则表达式'>js正则表达式</a></li><li style="float:left;margin-right:20px;"><a href='/search/article/?word=正则表达式.号'>正则表达式.号</a></li></ul></div><br/><div class="widget widget_ui_posts"><h3>置顶推荐</h3><ul><li><a href="/cate99/113247636454400.html"><span class="thumbnail"><img data-src="https://ss.0133.cn/upload/article/000/000/001/61c030e32e4d9281.jpg" alt="qq火花是过了24小时断吗" class="thumb"></span><span class="text">qq火花是过了24小时断吗</span><span class="muted">2021-12-20</span></a></li></ul></div><div class="widget widget_recent_entries"><h3>猜你喜欢</h3><ul><li><a href="/cate156/112031209252025.html" target="_blank">密码强度的正则表达式两种方案JS总结篇</a><span class="post-date">2021-11-11</span></li><li><a href="/cate156/11475210276025.html" target="_blank">正则表达式m修饰符(多行匹配)</a><span class="post-date">2021-10-07</span></li><li><a href="/cate156/111154657662500.html" target="_blank">正则表达式 \D 元字符(等价于"[^0-9]")</a><span class="post-date">2021-10-17</span></li><li><a href="/cate156/11478967765625.html" target="_blank">Java正则表达式过滤出字母、数字和中文</a><span class="post-date">2021-10-07</span></li><li><a href="/cate156/11475099985625.html" target="_blank">JavaScript基于正则表达式的数字判断函数</a><span class="post-date">2021-10-07</span></li><li><a href="/cate156/11477467140100.html" target="_blank">正则表达式之零宽断言实例详解【基于PHP】</a><span class="post-date">2021-10-07</span></li><li><a href="/cate156/11478947003600.html" target="_blank">JavaScript的正则也有单行模式了</a><span class="post-date">2021-10-07</span></li><li><a href="/cate156/112491488578025.html" target="_blank">js去掉首位空格的正则表达式</a><span class="post-date">2021-11-20</span></li></ul></div><!--<div class="widget widget_ui_tags"><h3>热门标签</h3><div class="items"><a href="/archives/tag/javascript">JavaScript (324)</a></div></div><div class="widget widget_ui_comments"><h3>最新评论</h3><ul><li><a href="" title=""><img data-src="" class="avatar avatar-100" height="50" width="50"><strong></strong></a></li></ul></div>--></div><div id="leftbar" class="leftbar"><div class="leftbar-con"><div style="text-align: center; width: 160px;"></div></div></div></section><footer class="footer"><div class="container"><p>© 2022 <a href="/">WEB前端开发</a></p><p><a href="/cate88/">工具教程</a> | <a href="/cate71/">前端开发</a> | <a href="/cate61/">常见问题</a> | <a href="/cate129/">操作系统</a> | <a href="/cate103/">编程</a> | <a href="/cate108/">网络安全</a> | <a href="/cate120/">设计</a> | <a href="/cate137/">站长技巧</a></p><div class="footer-gav" style="margin-bottom: 10px ;font-size: 12px;"><img src="https://ss.0133.cn/newimg88/2016/06/beian-gov-cn.png" style="vertical-align: middle; height: 14px;"/><a href="https://beian.miit.gov.cn/" target="_blank">鄂ICP备2021014202号-2</a></div><div class="footer-qrcode"></div></div></footer><script> window.jsui = { www: '', uri: '/wp-content/themes/dux', ver: '5.2.5', roll: ["1", "2"], ajaxpager: '0', url_rp: '/about' }; </script><script type='text/javascript' src='/wp-content/themes/dux/js/libs/bootstrap.min.js?ver=5.2.5'></script><script type='text/javascript' src='/wp-content/themes/dux/js/loader.js?ver=5.2.5'></script><script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=5.0.2'></script><script async="async" type='text/javascript' src='/wp-content/plugins/akismet/_inc/form.js?ver=4.0.8'></script><script type="text/javascript"> var $win = jQuery(window); var $WindowW = $win.width(); var $threebar = jQuery("#leftbar"); if ($threebar.length) { var offsetT = $threebar.offset().top; $win.on("scroll.leftbar", function () { if ($WindowW >= 1200) { if ($win.scrollTop() >= (offsetT)) { $threebar.find(".leftbar-con").css({ "position": "fixed", "top": 0 }); } else { $threebar.find(".leftbar-con").css("position", "static") } } }); } // Array var imagesArr = []; $('#article-content').find("img").each(function (index, Element) { imagesArr.push(Element) }); mediumZoom(imagesArr, { margin: 24, background: '#FFFFFF', scrollOffset: 0 }) </script><script> (function (i, s, o, g, r, a, m) { i['GoogleAnalyticsObject'] = r; i[r] = i[r] || function () { (i[r].q = i[r].q || []).push(arguments) }, i[r].l = 1 * new Date(); a = s.createElement(o), m = s.getElementsByTagName(o)[0]; a.async = 1; a.src = g; m.parentNode.insertBefore(a, m) })(window, document, 'script', '//www.google-analytics.com/analytics.js', 'ga'); ga('create', 'UA-3448069-1', 'css88.com'); ga('send', 'pageview'); </script><script> var _hmt = _hmt || []; (function () { var hm = document.createElement("script"); hm.src = "https://hm.baidu.com/hm.js?08985692e4db1e8be1cff8097c2979b7"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hm, s); })(); </script><script> (function () { var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script></body></html>