如何从 Atom Feed XML 中删除 HTML 标签
How to remove HTML tags from Atom Feed XML
我为基于 Laravel 的博客准备了一个 XML 提要。当我使用 feedvalidator 检查我的提要时。我收到有关 YouTube 嵌入式视频的错误消息:
line 24, column 0: content should not contain iframe tag (8 occurrences) [help]
我在控制器中获取我的提要:
public function index()
{
$data['posts'] = Post::orderBy('created_at', 'DESC')->->where('status',,1)-->limit(20)->get();
return Response::view('rss',$data, 200, [
'Content-Type' => 'application/xml; charset=UTF-8 ',
]);
}
我的 Feed xml 视图是:
{{ '<?xml version="1.0" encoding="utf-8" ?>' }}
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/">
<link rel="self" type="application/atom+xml" href="http://sirtcantalilar.com/feed" />
<title>Sirtcantalilar Topluluğu</title>
<subtitle>Üzerinde Güneş Batmayan Topluluk</subtitle>
<updated>{{ Carbon\Carbon::now()->toATOMString() }}</updated>
<author>
<name>Sırtçantalılar</name>
</author>
<id>tag:sirtcantalilar.com,{{date('Y-m-d')}}:/{{ Carbon\Carbon::now()->toATOMString() }}</id>
@foreach($posts as $post)
<entry>
<author>
<name>{{$post->author->name}}</name>
</author>
<title>{{ $post->title }}</title>
<link rel="alternate" type="text/html" href="{{ URL::route('view-post', $post->slug) }}"/>
<updated>{{$post->created_at->toATOMString() }}</updated>
<id>{{ post_tag_uri($post)}}</id>
@if(strlen($post->minicontent) > 0)
<summary>{{$post->minicontent }}</summary>
@else
<summary>{{ Str::words(strip_tags(preg_replace("/&#?[a-z0-9]{2,8};/i","",$post->content)),13)}}</summary>
@endif
<content type="html"><![CDATA[{{$post->content}}]]></content>
<category term="Blog"/>
<content type="html"><{{nl2br($post->content)}}></content>
</entry>
@endforeach
</feed>
如何从内容中删除 iframe?
编辑 1:我添加了这个功能:
function rss_noiframe($content) {
$content = preg_replace( '/<iframe(.*)\/iframe>/is', '', $content );
return $content;
}
并尝试获取视图:
<content type="html"><![CDATA[{{rss_noiframe($post->content)}}]]></content>
只是一个简短的想法,如何读取您的内容标签的 CData
content type="html"><![CDATA[{{$post->content}}]]></content>
变成像 PHP HTMLSimple 这样的 HTML 解析器。
$ret = $html->find('iframe');
然后把$ret中的元素丢掉。
(抱歉,我这里没有 php 工作环境,所以我只能给你一个抽象的理论来做这件事)
我认为这比仅使用正则表达式更安全。
对于那些想从这个问题中得到答案的人,我用下面的代码解决了:
<content type="html"><![CDATA[{{preg_replace( '/<iframe(.*)\/iframe>/is', '', $post->content )}}]]></content>
我为基于 Laravel 的博客准备了一个 XML 提要。当我使用 feedvalidator 检查我的提要时。我收到有关 YouTube 嵌入式视频的错误消息:
line 24, column 0: content should not contain iframe tag (8 occurrences) [help]
我在控制器中获取我的提要:
public function index()
{
$data['posts'] = Post::orderBy('created_at', 'DESC')->->where('status',,1)-->limit(20)->get();
return Response::view('rss',$data, 200, [
'Content-Type' => 'application/xml; charset=UTF-8 ',
]);
}
我的 Feed xml 视图是:
{{ '<?xml version="1.0" encoding="utf-8" ?>' }}
<feed xmlns="http://www.w3.org/2005/Atom"
xmlns:media="http://search.yahoo.com/mrss/">
<link rel="self" type="application/atom+xml" href="http://sirtcantalilar.com/feed" />
<title>Sirtcantalilar Topluluğu</title>
<subtitle>Üzerinde Güneş Batmayan Topluluk</subtitle>
<updated>{{ Carbon\Carbon::now()->toATOMString() }}</updated>
<author>
<name>Sırtçantalılar</name>
</author>
<id>tag:sirtcantalilar.com,{{date('Y-m-d')}}:/{{ Carbon\Carbon::now()->toATOMString() }}</id>
@foreach($posts as $post)
<entry>
<author>
<name>{{$post->author->name}}</name>
</author>
<title>{{ $post->title }}</title>
<link rel="alternate" type="text/html" href="{{ URL::route('view-post', $post->slug) }}"/>
<updated>{{$post->created_at->toATOMString() }}</updated>
<id>{{ post_tag_uri($post)}}</id>
@if(strlen($post->minicontent) > 0)
<summary>{{$post->minicontent }}</summary>
@else
<summary>{{ Str::words(strip_tags(preg_replace("/&#?[a-z0-9]{2,8};/i","",$post->content)),13)}}</summary>
@endif
<content type="html"><![CDATA[{{$post->content}}]]></content>
<category term="Blog"/>
<content type="html"><{{nl2br($post->content)}}></content>
</entry>
@endforeach
</feed>
如何从内容中删除 iframe? 编辑 1:我添加了这个功能:
function rss_noiframe($content) {
$content = preg_replace( '/<iframe(.*)\/iframe>/is', '', $content );
return $content;
}
并尝试获取视图:
<content type="html"><![CDATA[{{rss_noiframe($post->content)}}]]></content>
只是一个简短的想法,如何读取您的内容标签的 CData
content type="html"><![CDATA[{{$post->content}}]]></content>
变成像 PHP HTMLSimple 这样的 HTML 解析器。
$ret = $html->find('iframe');
然后把$ret中的元素丢掉。
(抱歉,我这里没有 php 工作环境,所以我只能给你一个抽象的理论来做这件事) 我认为这比仅使用正则表达式更安全。
对于那些想从这个问题中得到答案的人,我用下面的代码解决了:
<content type="html"><![CDATA[{{preg_replace( '/<iframe(.*)\/iframe>/is', '', $post->content )}}]]></content>