我从一些RSS feed网站上获取描述,其中一些描述包含要删除的图像和特定文本。
获取供稿的代码:
$rss = simplexml_load_file($website);
foreach ($rss->channel->item as $item) {
$description = (string)$item->descritpion;
}
这些是我得到的不同格式:
<description><![CDATA[
<p> //Post Description </p>
<p>The post <a rel="nofollow" href="">
//Post Title.</a> appeared first on
<a rel="nofollow" href="">//Feed Website.</a>.
</p>
]]></description>
_________________________________________________________________
<description><![CDATA[
<div>
<strong>//Some Text.</strong>
</div>
<div>
</div>
<div>//Some Text.</div>
<div>
<img alt="" src="" style="width: 640px; height: 427px;" />
</div>
]]></description>
_______________________________________________________________
<description>
<img style="margin:0 1em 1em 0;" align="left" src=""/>
„//Some Text.
</description>
要删除图像:
$description = (string)strip_tags($item->description);
文字为“帖子(帖子标题)首先出现在(网站)上”。
要删除该文本,我使用:
if (strpos($description, 'appeared first')) {
$siteNames = array('a.com', 'b.com', 'c.com');
foreach ($siteNames as $siteName) {
if(strpos($description, $siteName)){
$appeared = 'The post '.$item->title.' appeared first on '.$siteName;
$description = str_replace($appeared, '', $description);
}
}
}
例如,如果说明包含:
<p>The post
<a rel="nofollow" href="http://a.com/what-is-php">What is PHP.</a>
appeared first on
<a rel="nofollow" href="http://a.com">a.com.</a>.
</p>
然后应删除文本。
然后我使用strip_tags($item->description)
,没有显示图像。
但是当我使用代码删除字符串时,它并不能与所有描述一起使用,其中有些仍然包含字符串。
更新:
<description><![CDATA[
<p>Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2
</p>
<p>The post <a rel="nofollow" href="https://a.com/post-title/">Laugardalsá – forfallaholl á besta tíma</a> appeared first on <a rel="nofollow" href="https://a.com">a.com</a>.</p>
]]></description>
答案 0 :(得分:1)
代码:(Demo)
$xml = '<![CDATA[
<p>Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2
</p>
<p>The post <a rel="nofollow" href="https://a.com/post-title/">Laugardalsá – forfallaholl á besta tíma</a> appeared first on <a rel="nofollow" href="https://a.com">a.com</a>.</p>
]]>';
$finds = [
'~<p>The post <a rel="nofollow" href="https?://[a-z]+\.com[^"]*">.*?</a> appeared first on <a rel="nofollow" href="https?://[a-z]+\.com[^"]*">.*?</a>\.</p>~iu',
'~^<!\[CDATA\[~',
'~\]\]>$~'
];
var_export(trim(strip_tags(preg_replace($finds, '', $xml))));
输出:
'Við vorum að fá inn til okkar forfallaholl í Laugardalsá á best tíma. Annarsvegar er um að ræða hollið 18-21. júlí og síðan hollið 24-27. júlí. Bæði eru hollin á frábærum tíma í ánn. Þó svo um 3ja daga holl sé að ræða, er að hægt að skoða staka daga eða 1 1/2 eða 2'
我希望这将在很大程度上以所需的方式处理您的数据。第一个正则表达式模式肯定是最毛的(请参阅链接以获取模式说明)。您将需要调整[abc]\.com
以满足自己的需要-可能会做类似(?:test\.com|example\.net|sample\.co\.uk)
的事情。直到获得“正确”的结果,然后将一些输入数据输入regex101并不断调整模式,直到它起作用为止。
第二个和第三个模式只是清除文本包装程序。虽然第二个并不是真正必要的,因为strip_tags()
会清除该子字符串,但第三个至关重要,因为strip_tags()
会留下一个悬垂的]]>
。
第一个模式不区分大小写(i
)和Unicode容忍(u
),以获得最佳效果。
^
和$
是字符串定界符的开头和结尾。如果它们不适合您的实际数据,则可以将其删除。这些步骤仅是尝试“删除”任何不需要的残留子字符串。我肯定会加入trim()
调用,以使存储的数据尽可能干净。
如果要删除的特定<p>
标记子字符串嵌套在两个要保留的子字符串之间,则您可能希望添加其他模式以将多个\s{2,}
压缩为单个空格,或者您可以写成{ {1}}在我的第一个模式末尾以捕获尾随空白。只有你会知道这一点。